我知道您可以检查它是否是只读的,然后执行 try-catch 语句以查看它是否可读,但是是否有内置的方法来检查文件是否已被使用?
问问题
3063 次
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 回答