在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;
}

这是我用来保存图像的方法,当它达到删除文件的部分时,如果它已经存在,它会抛出错误,但在某些情况下,它执行得很好,没有错误。

在WP7 Mango中尝试将映像写入隔离存储时发生错误

stacktrace指向DeleteFile。您确定删除路径有效吗?您确定该文件存在吗?我不太记得了,但我认为如果没有找到文件,删除文件可能会抛出-请检查链接的MSDN方法描述中的示例-他们在那里有一个if -exists。[编辑:很抱歉,我今天有点累了,我没有把你的代码看完。]很明显,你的代码已经防范了文件不存在。]

除了可能的不存在问题之外,还有一种很小的可能性,在这里,但是在代码的其他地方,有一些东西打开了文件并且没有正确关闭它。在这种情况下,系统将认为文件正在使用中(即使在其他地方打开的"旧"句柄被"遗忘"并等待GC'ed),并且除非该句柄实际死亡,否则对该文件的任何操作都不会成功。

另一件事是,即使使用/autodispose,如果您试图从不同的线程一次多次调用该方法,该操作仍然可能失败。对于异步模式,有时很难注意到——彻底检查从代码的哪个点调用该方法,并考虑是否可能发生这种情况。同时GUI回调会调用它,也许还有一些后台操作?如果是这样,请尝试用锁语句另外包装using。如果这有帮助,这意味着您有重入问题。

编辑:在遥远的将来,有人会因为我编辑了几百次而杀了我。但我还是会写:)我认为,一般来说,你不必在写入文件之前删除它。CreateFile并不是唯一可以访问文件的。使用mode=OpenOrCreate|Truncate或更短的mode=Create检查OpenFile

首先,当您使用using语句时,没有理由调用fstream.Close();fstream.Dispose();,它会自动关闭和处置流。

其次,你的错误不够明确。