在尝试打开文件进行读取之前,有什么方法可以先测试文件是否正在使用?例如,如果文件仍在写入或被视为正在使用,则此代码块将引发异常:
try
{
FileStream stream = new FileStream(fullPath, FileMode.Open, FileAccess.Read, FileShare.Read);
}
catch (IOException ex)
{
// ex.Message == "The process cannot access the file 'XYZ' because it is being used by another process."
}
我环顾四周,我能找到的最好的办法就是执行某种带有 try catch 的轮询,这感觉so哈克。我希望有一些东西System.IO.FileInfo
但没有。
有更好的方法吗?
“您可以直接通过 P/Invoke 层调用 LockFile API 函数。您可以使用 FileStream 上的 SafeFileHandle 属性返回的句柄。
直接调用 API 将允许您检查错误条件的返回值,而不是诉诸捕获异常。”
"try/catch 块是正确的解决方案(尽管你想捕获 IOException,而不是所有异常)。您无法正确同步,因为测试锁+获取锁不是原子操作。”
"请记住,文件系统是易失性的:仅仅因为您的文件在一次操作中处于一种状态并不意味着它在下一次操作中将处于相同状态。您必须能够处理文件系统中的异常。”
使用 C# 是否可以测试文件是否持有锁
http://www.dotnet247.com/247reference/msgs/32/162678.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)