为什么我第二次写入同一个文件时会抛出IsolatedStorageException?

时间:2011-10-06 06:16:11

标签: .net silverlight windows-phone-7

在我的单元测试中,我使用以下代码打开一个流并写入它:

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

第一次成功,但第二次失败时出现以下日志输出: 附加信息:IsolatedStorageFileStream上不允许操作。

FileMode.Create枚举常量定义为:

指定操作系统应创建新文件。如果该文件已存在,则将被覆盖。 Create等同于请求如果文件不存在,则使用CreateNew;否则,请使用截断。

所以看起来这是正确的常数。

我在stackoverflow上发现了一些类似的问题 IsolatedStorageFileStream exception is throw when file is opened?

但他们没有帮助。正如在网上某处建议的那样(现在找不到链接),我尝试先删除该文件(如果它存在),与枚举注释相反,如下所示,但也没有帮助:

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

问题:我缺少什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

首先,您应该真正使用using语句,而不是显式调用CloseDispose - 否则,如果有异常,您赢了't 关闭了流。

其次,我怀疑问题是你没有处理商店本身。试试这个:

using (var store = IsolatedStorageFile.GetUserStoreForApplication())
using (var stream = store.OpenFile(filename, FileMode.Create))
{
    ...
}

答案 1 :(得分:0)

您将对Iso存储的引用放在本地变量存储中,但稍后您使用成员(?)变量 m_store 来创建流。
这只是这个问题的一个错字,还是你正在执行的实际代码?