.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:如果您发布了不同的代码,并且有不同的问题,那么很难判断您的真实代码有什么问题。我很欣赏真正简短但完整的程序在手机应用程序中很难发布,但你可以发布一个简短但完整的程序部分。好吧,我的坏。。。对不起,浪费了你的时间。我正确地关闭了输出流,但没有关闭输入流(用于读取文件)。这就是问题的根源。但是无论如何,关于使用关键字的好提示!这是一个打字错误。。。今天晚些时候我将发布一个更好的代码示例