2013-07-12 2 views
0

Я пытаюсь сериализация объекта с помощью бинарной сериализации и некоторые помощники взяты из WPPerfLab и я получил ошибку в этой строке:«Операция не допускается на IsolatedStorageFileStream» при написании файла

using (IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(FileName, FileMode.Create, myIsolatedStorage)) 

Вот короткий фрагмент того, что я делаю.

using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      if (myIsolatedStorage.FileExists(FileName)) 
      { 
       myIsolatedStorage.DeleteFile(FileName); 
      }     
      using (IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(FileName, FileMode.Create, myIsolatedStorage)) 
      {           
       new BinarySerializationHelper().Serialize(fileStream, object); 
      } 
    } 

Через некоторого Googling я обнаружил, что это может быть ошибкой, связанной поток, но я совершенно уверен, что нет никакого другого потока, который открыл файл, который я пытаюсь написать (имя также случайное!).

Итак, как я могу решить эту проблему?

+0

где вызывается этот фрагмент? вы уверены, что он не вызывается более одного раза с тем же именем? – nicholas

+0

Он называется только один раз кнопкой (и я нажимаю только один раз!), И он находится в статическом методе (что-то вроде 'DataManager.saveData (object)'). Имя файла зависит как от hashCode, так и от текущей даты/времени. – StepTNT

ответ

0

Я нашел вашу ошибку брата. На самом деле причиной ошибки является не ИзолированныйStorageFileStream, а невинно выглядящая строка FileName.

Я полагаю, вы создаете FileName в качестве

строка FileName = "some_random_string" + DateTime.Now.ToString ("чч: мм");

или какой-либо другой формат времени использования. Поместите точку останова на эту строку. Вы увидите, что значение FileName содержит символ «:» .... КОТОРЫЙ ОЧЕНЬ ОЧЕНЬ НЕДОПУСТИМ. Отсюда и ошибка. Попробуйте назвать файл другим способом.

Но этот конструктор IsolatedStorageFileStream меня очень сильно задевает. Поэтому я использую другой способ. Я использую метод потока IsolateStorage для открытия файла. Посмотрите на код

using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
    { 
     if (myIsolatedStorage.FileExists(FileName)) 
     { 
      myIsolatedStorage.DeleteFile(FileName); 
     }     
     using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile(FileName, System.IO.FileMode.CreateNew)) 
     {           
      new BinarySerializationHelper().Serialize(fileStream, object); 
     } 
} 
Смежные вопросы