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

时间:2011-09-13 06:14:32

标签: c# windows-phone-7

这里我附上了代码段。

错误是: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的方法,当它到达删除文件的部分时执行(如果它已经存在),它会抛出错误,但在某些情况下它会完美地执行而没有错误。

2 个答案:

答案 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标志以获取解释)