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

.net 为什么我在第二次写入同一文件时会抛出IsolatedStorageException?,.net,silverlight,windows-phone-7,.net,Silverlight,Windows Phone 7,在我的单元测试中,我使用以下代码打开一个流并对其进行写入: IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication(); stream = m_store.OpenFile(filename, FileMode.Create); ... stream.Flush(); stream.Close(); stream.Dispose(); store.Dispose() 第一次成功,第二次失败,日志输出如

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

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

看来这是正确的常数

我在stackoverflow上发现了一些类似的问题,例如

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

if (store.FileExists(filename))
{
   store.DeleteFile(filename);
}
问题:我缺少什么

谢谢

首先,您应该真正使用
using
语句,而不是显式调用
Close
Dispose
——否则,如果出现异常,您就不会关闭流

第二,我怀疑问题在于你没有处理好商店本身。试试这个:

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

您将对Iso存储的引用放在局部变量store中,但随后使用成员(?)变量m_store来创建流

这只是这个问题中的一个输入错误,还是您正在执行的实际代码?

谢谢,但不幸的是,不是这样。。。上面的代码有点过于简单。局部变量实际上是一个类中的数据成员,我实际上在一个成员函数中进行闭包,并在该函数中处理存储。我还添加了日志语句,因此我确信正在调用此函数。。。我不能使用using,因为流的打开和写入是在我正在实现的类之外完成的…@swinefrest:如果您发布了不同的代码,并且有不同的问题,那么很难判断您的真实代码有什么问题。我很欣赏真正简短但完整的程序在手机应用程序中很难发布,但你可以发布一个简短但完整的程序部分。好吧,我的坏。。。对不起,浪费了你的时间。我正确地关闭了输出流,但没有关闭输入流(用于读取文件)。这就是问题的根源。但是无论如何,关于使用关键字的好提示!这是一个打字错误。。。今天晚些时候我将发布一个更好的代码示例