2010-11-03 1 views
5

Я создаю приложение Windows Phone 7 в Silverlight. У меня проблемы с 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(); 
      } 
     } 

Исключение:

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

Что я мог делать неправильно здесь? MSDN says, что это исключение выбрасывается, когда изолированное хранилище удаляется или отключается. Неужели это случилось? Я испытываю эту проблему на эмуляторе.

Обновление: Это происходит только при первом запуске приложения на эмуляторе. После сбоя приложения я снова запускаю его на эмуляторе, и эта проблема не возникает.

Update 2: Использование FileMode.OpenOrCreate вместо FileMode.Open, кажется, решить эту проблему.

+0

Я использую FileMode.OpenOrCreate, но по-прежнему получать тот же вопрос. В первый раз он преуспевает, но секунд времени он терпит неудачу. – swinefeaster

ответ

3

Первый раз, когда вы запускаете приложение, файл не существует, попробуйте вместо этого:

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

Но я называю 'storage.CreateFile (FILE_NAME)'. Это ничего не значит? –

+0

Да, но в этом фрагменте кода вы не использовали поток, возвращаемый вызовом storage.CreateFile. До тех пор, пока экземпляр THAT не загорится или не закроется, файл все равно не будет существовать. С изменением параметра FileMode вы можете просто удалить вызов CreateFile, чтобы очистить его. –

+0

Мне нужно что-то вроде 'storage.CreateFile (« Foo »). Flush()'? –