如何知道IsolatedStorage中的文件是否已经打开?
问题描述:
我已经使用IsolatedStorageFile
类的DeleteFile方法从IsolatedStorage中删除文件。有时这种方法会抛出IsolatedStorageException
。我提到的MSDN页面说,当“目标文件打开或路径不正确时,抛出此异常”。如何知道IsolatedStorage中的文件是否已经打开?
要检查文件是否真的存在,我可以在调用DeleteFile
方法之前调用IsolatedStorageFile.FileExists
方法。
但是我怎么知道我想删除的文件是否打开?我想知道,因为这可能是为什么我得到的除外)
更新1:我想我的运行应用程序的多个实例。
答
显然,您正在同时打开隔离存储中包含应用程序多个实例的文件,并尝试删除该文件。那么,你的问题。如果您的应用程序的另一个实例打开了该文件,则无法删除该文件。
这里是你可以做什么:
- 使用互斥做到进程间同步see MSDN,并与其他应用程序实例检查,如果它是确定要删除的文件。
- 只允许你的应用程序的一个实例来运行(尽管你explcitly说你想要的多个实例,您可能要重新考虑)
- 使用一个单独的文件为每个应用程序实例
哪种解决方案使用取决于您的应用程序的工作方式以及文件的用途。
编辑:您不能检查文件是否删除它,因为该文件可以检查和删除之间的另一个应用程序实例中打开之前打开。
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您的时间和答案。我upvoted! :) 吃掉异常,假设其他实例将删除它,可能是一个策略。它几乎每次都能正常工作,除非应用程序的最后一个实例抛出异常(因为不会有任何实例会继续前进并按照我们的假设将其删除)。 – Learner