如何知道IsolatedStorage中的文件是否已经打开?

时间:2014-03-28 07:02:37

标签: c# .net file-io isolatedstorage

我使用IsolatedStorageFile类的DeleteFile方法从IsolatedStorage中删除文件。有时这种方法会抛出IsolatedStorageException。我提到的MSDN页面说当" 目标文件打开或路径不正确时会抛出此异常"。

要检查文件是否真的存在,我可以在调用IsolatedStorageFile.FileExists方法之前调用DeleteFile方法。

但我怎么知道我要删除的文件是否已打开?我想知道它,因为这可能是我得到异常的原因。)


更新1:我正在尝试运行我的应用程序的多个实例。

1 个答案:

答案 0 :(得分:2)

显然,您正在使用应用程序的多个实例同时打开隔离存储中的文件,并尝试删除该文件。那么,那就是你的问题。如果应用程序的另一个实例打开了文件,则无法删除该文件。

以下是您可以做的事情:

  • 使用Mutex进行进程间同步see MSDN,并检查其他应用程序实例是否可以删除该文件。
  • 只允许运行您的应用程序的一个实例(尽管您说您想要多个实例,但您可能需要重新考虑)
  • 为每个应用程序实例使用单独的文件

使用哪种解决方案取决于您的应用程序的工作方式以及文件的用途。

编辑无法检查文件是否在删除之前是否已打开,因为文件可能会在检查和另一个应用程序实例删除之间打开。

If(!FileIsOpen(path))
{
    // here, another application may open the file

    DeleteFile(path); // oops
}

可以做的是:

try
{
    DeleteFile(path);
}
catch(IsolatedStorageException)
{
    // do nothing; let the other instances try and delete the file.
}