Почему я получаю исключение IsolatedStorageException во второй раз при записи в тот же файл? - PullRequest
0 голосов
/ 06 октября 2011

В моих модульных тестах я использую следующий код для открытия потока и записи в него:

IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();
stream = m_store.OpenFile(filename, FileMode.Create);
...
stream.Flush();
stream.Close();
stream.Dispose();
store.Dispose()

Первый раз, когда это удается, но во второй раз, это терпит неудачу со следующим выводом журнала: Дополнительная информация: Операция не разрешена в IsolatedStorageFileStream.

Константа перечисления FileMode.Create определяется как:

Указывает, что операционная система должна создать новый файл. Если файл уже существует, он будет перезаписан. Create эквивалентно запросу, что если файл не существует, используйте CreateNew; в противном случае используйте Truncate.

так что похоже это правильная константа.

Я нашел несколько похожих вопросов о стеке потока, таких как Исключение IsolatedStorageFileStream - выбрасывать при открытии файла?

но они не помогли. Как было предложено где-то в сети (сейчас не могу найти ссылку), я попытался сначала удалить файл, если он существовал, вопреки комментариям enum, как показано ниже, но тоже не помогло:

if (store.FileExists(filename))
{
   store.DeleteFile(filename);
}

ВОПРОС: Чего мне не хватает?

Спасибо!

Ответы [ 2 ]

1 голос
/ 06 октября 2011

Во-первых, вы должны действительно использовать оператор using вместо явного вызова Close или Dispose - в противном случае, если есть исключение, вы не закроетепоток.

Во-вторых, я подозреваю, что проблема в том, что вы не утилизировали сам магазин.Попробуйте это:

using (var store = IsolatedStorageFile.GetUserStoreForApplication())
using (var stream = store.OpenFile(filename, FileMode.Create))
{
    ...
}
0 голосов
/ 07 октября 2011

Вы помещаете ссылку на Iso-хранилище в локальной переменной store , но позже вы используете переменную-член (?) m_store для создания потока.
Это просто опечатка в этом вопросе или код, который вы выполняете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...