这里我附上了代码段。
错误是: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;
}
这是我用来保存Image的方法,当它到达删除文件的部分时执行(如果它已经存在),它会抛出错误,但在某些情况下它会完美地执行而没有错误。
答案 0 :(得分:1)
首先,当您使用fstream.Close();
语句时,没有理由致电fstream.Dispose();
和using
,该语句会自动关闭并处理该流。
其次,您的错误不够明确。
答案 1 :(得分:1)
stacktrace指向DeleteFile。您确定要删除的路径是否有效?你确定该文件存在吗?我记不太清楚,但我认为如果找不到文件,删除文件可能会抛出 - 请检查链接的MSDN方法描述中的示例 - 它们在那里存在IF。
[编辑:对不起,今天我有点累了,我没有正确阅读你的代码。显然,你的代码已经防范了文件不存在。]
除了可能存在的问题之外,还有一个很小的可能性就是在这里,但是在你的代码的其他地方,有一些东西打开了文件而没有正确关闭它。在这种情况下,系统会认为文件正在使用中(即使在其他地方打开的“旧”句柄“被遗忘”并等待GC')并且该文件上的任何操作都不会成功处理实际死亡的文件。< / p>
另一件事是,即使你使用/自动执行,如果你试图从不同的线程一次多次调用该方法,操作仍然会失败。对于异步模式,有时可能很难注意到 - 从这个方法调用的代码点进行彻底检查,并考虑是否可能发生这种情况。同时GUI回调会调用它,也许还有一些后台操作?如果是这样,请尝试使用lock语句另外包装使用。如果这有帮助,那就意味着你有重入问题。
编辑:有人,在遥远的未来的某个时刻,会因为编辑的内容而杀了我..但我会写它反正:):我认为一般来说,你不必在写入之前删除文件它。 CreateFile不是唯一可以访问文件的人。使用mode = OpenOrCreate | Truncate或更短的方式检查OpenFile:mode = Create(请参阅FileMode标志以获取解释)