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

C# 如何知道IsolatedStorage中的文件是否已打开?,c#,.net,file-io,isolatedstorage,C#,.net,File Io,Isolatedstorage,我使用了IsolatedStorageFile类的方法从IsolatedStorage中删除该文件。有时此方法会引发隔离存储异常。我提到的MSDN页面说,当“目标文件打开或路径不正确”时会引发此异常 要检查文件是否确实存在,我可以在调用DeleteFile方法之前调用IsolatedStorageFile.FileExists方法 但是我如何知道我试图删除的文件是否打开?我想知道它,因为这可能是我得到异常的原因。) 更新1:我正在尝试运行我的应用程序的多个实例。显然,您正在使用应用程序的多个实

我使用了
IsolatedStorageFile
类的方法从IsolatedStorage中删除该文件。有时此方法会引发
隔离存储异常
。我提到的MSDN页面说,当“目标文件打开或路径不正确”时会引发此异常

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

但是我如何知道我试图删除的文件是否打开?我想知道它,因为这可能是我得到异常的原因。)



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

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

以下是您可以做的:

  • 使用互斥锁执行进程间同步,并检查其他应用程序实例是否可以删除该文件
  • 只允许运行应用程序的一个实例(尽管您明确表示需要多个实例,但可能需要重新考虑)
  • 为每个应用程序实例使用单独的文件
使用哪种解决方案取决于应用程序的工作方式以及文件的用途

编辑:您无法在删除文件之前检查该文件是否已打开,因为该文件可能在检查和被其他应用程序实例删除之间打开

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.
}

谢谢@helb的时间和回答。我投了赞成票!:)吃掉异常,假设其他实例将删除它,可能是一种策略。它几乎每次都能工作,但有一次应用程序的最后一个实例抛出异常时除外(因为不会再有任何实例像我们假设的那样来删除它)。