当前位置:  开发笔记 > 编程语言 > 正文

使用C#可以测试文件上是否存在锁定

如何解决《使用C#可以测试文件上是否存在锁定》经验,为你挑选了2个好方法。

背景: 我使用偏移到文件和文件流锁定/解锁menthods来控制读/写访问.我使用以下代码来测试当前是否锁定文件

try
{
  fs.Lock( RESERVED_BYTE, 1 );
  fs.Unlock( RESERVED_BYTE, 1 );
  rc = 1;
}
catch
{ 
  rc = 0; 
}

问题:
我的目标是消除try/catch块.有没有更好的方法来查看锁是否存在?

编辑:
注意:此问题与文件是否存在无关.我已经知道了.它是关于同步写访问.



1> casperOne..:

您可以直接通过P/Invoke层调用LockFileWindows API函数.您将使用FileStream上的SafeFileHandle属性返回的句柄.

直接调用API将允许您检查错误条件的返回值,而不是诉诸捕获异常.


Noah询问调用P/Invoke层与try/catch是否有任何开销.

Lock文件通过P/Invoke层进行相同的调用,如果对LockFile的调用返回0,则抛出异常.在您的情况下,您不会抛出异常.如果文件被锁定,您将花费更少的时间,因为您没有处理堆栈展开.

实际的P/Invoke设置大概是七条指令我相信(为了比较,COM interop大约是40),但是这一点没有实际意义,因为你对LockFile的调用与managed方法的作用相同(使用P/Invoke)层).



2> Jon B..:

我个人试图打开它时会抓住一个锁定的文件.如果它现在已解锁,当您尝试打开它时可能会被锁定(即使它仅在几毫秒之后).

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有