测试文件的可访问性
本文关键字:访问 文件 测试 | 更新日期: 2023-09-27 18:07:25
避免像
这样的异常(1)进程无法访问该文件,因为它已被另一个进程使用
在进一步处理之前,我使用以下方法测试文件的可访问性。
private bool CheckIfFileBeingUsed(string FilePath)
{
FileStream Fs = null;
try
{
Fs = File.Open(FilePath, FileMode.Open, FileAccess.Read, FileShare.None);
Fs.Close();
}
catch (Exception)
{
return true; //Error File is being used
}
return false; //File is not being used.
}
有没有人能告诉我有任何Windows API或其他解决方案来测试文件可访问性,而不是上面的文件。开放方法?
看起来你在重复工作。既然试图打开文件进行处理会抛出与这里捕获的异常相同的异常,为什么不直接尝试处理文件,并在出现异常时处理异常呢?
假设由于某种原因这是不可能的,这样的测试仍然不是完全可靠的,因为您现在有一个竞争条件。即使这个测试通过了,也不能保证当您在该文件上运行其他代码时,该文件将处于相同的状态。这就是为什么只尝试做您想做的事情,并在此时处理任何异常会更容易。
这个检查的目的是什么?您试图通过使异常更早地发生并捕获它来避免异常,但是为什么不在当前的设计中捕获它呢?而且,这种方法受竞争条件的影响,因为文件可能在检查之后就变得不可访问,所以唯一正确的方法是只做任何您需要的处理并捕获抛出的异常。
你的方法对我来说似乎有效。但是,不要忘记在出现异常的情况下关闭流:
finally
{
if (Fs!= null)
Fs.Close();
}
请记住,没有100%的保证这将防止'file in use'异常。在检查和实际打开文件之间总是有一段很短的时间(毫秒),在此期间文件可能正在被另一个进程使用。
只要显式地处理文件存在检查,这个方法就可以。你的方法返回true
,即使File Doesn't Exist