背景:我使用文件偏移量和文件流锁定/解锁方法来控制读/写访问。我正在使用以下代码来测试文件当前是否持有锁
try
{
fs.Lock( RESERVED_BYTE, 1 );
fs.Unlock( RESERVED_BYTE, 1 );
rc = 1;
}
catch
{
rc = 0;
}
问题:
我的目标是消除 try/catch 块。有没有更好的方法来查看锁是否存在?
EDIT:
注意:这个问题与文件是否存在无关。我已经知道确实如此。它与同步写访问有关。
您可以致电LockFileWindows API函数直接通过 P/Invoke 层。您将使用 FileStream 上的 SafeFileHandle 属性返回的句柄。
直接调用 API 将允许您检查错误条件的返回值,而不是诉诸捕获异常。
Noah询问与 try/catch 相比,调用 P/Invoke 层是否有任何开销。
Lock 文件通过 P/Invoke 层进行相同的调用,如果对 LockFile 的调用返回 0,则抛出异常。在您的情况下,您不会抛出异常。如果文件被锁定,您将花费更少的时间,因为您不处理堆栈展开。
我相信实际的 P/Invoke 设置大约有 7 条指令(作为比较,COM 互操作大约是 40 条),但是这一点没有实际意义,因为您对 LockFile 的调用正在执行与托管方法相同的操作(使用 P/Invoke层)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)