测试文件的可访问性

本文关键字:访问 文件 测试 | 更新日期: 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