检查文件是否可读的标准方法?

时间:2013-01-01 20:08:49

标签: c# file

我知道你可以检查它是否是只读的,然后执行try-catch语句来查看它是否可读,但有没有内置的方法来检查文件是否已被使用?

2 个答案:

答案 0 :(得分:7)

使用FileSystemInfo.Attributes属性,然后查看FileAttributes.ReadOnly

var file = new FileInfo(path);
if ((file.Attributes & FileAttributes.ReadOnly) != 0)
{
    // Do whatever you want for a read-only file
}

请注意,与您是否可以写入文件相同。如果它已经在使用,那么你可能无法写入它。即使 指示您是否可以在调用该属性时写入它,也不会告诉您之后是否可以立即写入该文件。

基本上,如果你想处理尝试写入可能失败的文件,你使用try / catch。我会特别捕获IOException(或者更具体的例外),而不是捕获所有异常。

答案 1 :(得分:2)

打开文件时使用FileShare.None。如果任何其他进程具有该文件的句柄,则该调用将失败。

例如:检查文件是否可写且未使用:

bool isWritableAndFree = false;
try {
    using (new FileStream(name, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
    {
        isWritableAndFree = true;
    }
} catch { }
return isWritableAndFree;

但请注意,此类代码容易受到TOCTOU错误的攻击。在使用时捕捉异常通常会更好。