2

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

4

2 回答 2

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专门捕获(或者可能是更具体的异常),而不是捕获所有异常。

于 2013-01-01T20:12:00.667 回答
2

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

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

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

但是请注意,这种类型的代码容易受到TOCTOU错误的影响。通常最好在使用时捕获异常。

于 2013-01-01T20:12:47.203 回答