在WP7 Mango中尝试将映像写入隔离存储时发生错误
本文关键字:存储 隔离 错误 映像 Mango WP7 | 更新日期: 2023-09-27 18:08:29
我在这里附上代码片段。
错误是:An error occurred while accessing IsolatedStorage.
public Boolean SaveImage(string filename, WriteableBitmap wrtbmp)
{
try
{
using (IsolatedStorageFile iSF = IsolatedStorageFile.GetUserStoreForApplication())
{
if (iSF.FileExists(filename))
{
iSF.DeleteFile(filename);
}
using (IsolatedStorageFileStream fstream = new IsolatedStorageFileStream(filename, FileMode.CreateNew, FileAccess.Write, iSF))
{
wrtbmp.SaveJpeg(fstream, wrtbmp.PixelWidth, wrtbmp.PixelHeight, 0, 100);
fstream.Close();
fstream.Dispose();
}
}
}
catch (Exception ex)
{
if (System.Diagnostics.Debugger.IsAttached)
{
System.Diagnostics.Debugger.Break();
}
return false;
}
return true;
}
这是我用来保存图像的方法,当它达到删除文件的部分时,如果它已经存在,它会抛出错误,但在某些情况下,它执行得很好,没有错误。
stacktrace指向DeleteFile。您确定删除路径有效吗?您确定该文件存在吗?我不太记得了,但我认为如果没有找到文件,删除文件可能会抛出-请检查链接的MSDN方法描述中的示例-他们在那里有一个if -exists。[编辑:很抱歉,我今天有点累了,我没有把你的代码看完。]很明显,你的代码已经防范了文件不存在。]
除了可能的不存在问题之外,还有一种很小的可能性,在这里,但是在代码的其他地方,有一些东西打开了文件并且没有正确关闭它。在这种情况下,系统将认为文件正在使用中(即使在其他地方打开的"旧"句柄被"遗忘"并等待GC'ed),并且除非该句柄实际死亡,否则对该文件的任何操作都不会成功。
另一件事是,即使使用/autodispose,如果您试图从不同的线程一次多次调用该方法,该操作仍然可能失败。对于异步模式,有时很难注意到——彻底检查从代码的哪个点调用该方法,并考虑是否可能发生这种情况。同时GUI回调会调用它,也许还有一些后台操作?如果是这样,请尝试用锁语句另外包装using。如果这有帮助,这意味着您有重入问题。
编辑:在遥远的将来,有人会因为我编辑了几百次而杀了我。但我还是会写:)我认为,一般来说,你不必在写入文件之前删除它。CreateFile并不是唯一可以访问文件的。使用mode=OpenOrCreate|Truncate或更短的mode=Create检查OpenFile首先,当您使用using
语句时,没有理由调用fstream.Close();
和fstream.Dispose();
,它会自动关闭和处置流。
其次,你的错误不够明确。