2010-11-03 11 views
5

Estoy construyendo una aplicación Windows Phone 7 en Silverlight. Estoy teniendo dificultades con IsolatedStorage..NET: IsolatedStorageException

 IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication(); 
     if (!storage.FileExists(STORIES_FILE)) 
     { 
      storage.CreateFile(STORIES_FILE); 
     } 

     string contents; 

     // fails here 
     using (IsolatedStorageFileStream stream = storage.OpenFile(STORIES_FILE, FileMode.Open)) 
     { 
      using (StreamReader reader = new StreamReader(stream)) 
      { 
       contents = reader.ReadToEnd(); 
      } 
     } 

La excepción es:

"Operation not permitted on IsolatedStorageFileStream." 
System.Exception {System.IO.IsolatedStorage.IsolatedStorageException} 

Qué podría estar haciendo mal aquí? MSDN says que esta excepción se produce cuando se elimina o deshabilita el almacenamiento aislado. ¿Pudo haber sucedido eso? Estoy experimentando este problema en el emulador.

Actualización: Parece que esto solo ocurre la primera vez que ejecuto la aplicación en el emulador. Después de que la aplicación falla, la vuelvo a ejecutar en el emulador y este problema no ocurre.

Actualización 2: Usando FileMode.OpenOrCreate en lugar de FileMode.Open parece haber resuelto el problema.

+0

estoy usando FileMode.OpenOrCreate, pero todavía conseguir el mismo problema. La primera vez que tiene éxito, pero los segundos fallan. – swinefeaster

Respuesta

3

La primera vez que se ejecuta la aplicación, el archivo no está allí, probar este lugar:

using (IsolatedStorageFileStream stream = storage.OpenFile(STORIES_FILE, FileMode.OpenOrCreate)) 
     { 
      using (StreamReader reader = new StreamReader(stream)) 
      { 
       contents = reader.ReadToEnd(); 
      } 
     } 
+0

Pero estoy llamando 'storage.CreateFile (FILE_NAME)'. Eso no hace nada? –

+0

Sí, pero en ese fragmento de código, no usaste la secuencia devuelta por la llamada storage.CreateFile. Hasta que ESA instancia se haya enjuagado o cerrado, el archivo aún no existiría. Con el cambio en el parámetro FileMode, puede eliminar la llamada a CreateFile para limpiarlo. –

+0

Entonces necesito algo como 'storage.CreateFile (" Foo "). Flush()'? –

Cuestiones relacionadas