我知道你可以检查它是否是只读的,然后执行try-catch语句来查看它是否可读,但有没有内置的方法来检查文件是否已被使用?
答案 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错误的攻击。在使用时捕捉异常通常会更好。