背景: 我使用偏移到文件和文件流锁定/解锁menthods来控制读/写访问.我使用以下代码来测试当前是否锁定文件
try { fs.Lock( RESERVED_BYTE, 1 ); fs.Unlock( RESERVED_BYTE, 1 ); rc = 1; } catch { rc = 0; }
问题:
我的目标是消除try/catch块.有没有更好的方法来查看锁是否存在?
编辑:
注意:此问题与文件是否存在无关.我已经知道了.它是关于同步写访问.
您可以直接通过P/Invoke层调用LockFile
Windows API函数.您将使用FileStream上的SafeFileHandle属性返回的句柄.
直接调用API将允许您检查错误条件的返回值,而不是诉诸捕获异常.
Noah询问调用P/Invoke层与try/catch是否有任何开销.
Lock文件通过P/Invoke层进行相同的调用,如果对LockFile的调用返回0,则抛出异常.在您的情况下,您不会抛出异常.如果文件被锁定,您将花费更少的时间,因为您没有处理堆栈展开.
实际的P/Invoke设置大概是七条指令我相信(为了比较,COM interop大约是40),但是这一点没有实际意义,因为你对LockFile的调用与managed方法的作用相同(使用P/Invoke)层).
我个人试图打开它时会抓住一个锁定的文件.如果它现在已解锁,当您尝试打开它时可能会被锁定(即使它仅在几毫秒之后).