如何在多用户环境中锁定文件?

时间:2011-05-04 18:23:48

标签: c#-3.0

我有一个托管在服务器上的可执行文件,可以从多个客户端工作站启动。 exe需要读取和写入位于同一服务器(共享位置)上的特定文本文件。由于exe可以从多个工作站启动,我需要锁定文本文件并进行一些处理和解锁文件,因此任何时候,只有一个用户可以访问该文件。此外,当文件被另一个用户锁定时,我需要向用户显示一些消息。文件解锁后,其他用户可以锁定并进行处理。

有没有人可以提供一些示例代码片段如何实现? 非常感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

您需要使用写访问权限和FileShare.None打开文件,这意味着当用户打开文件时,其他任何人都无法写入该文件。

try..catch...块将使您能够向他们发送消息,告诉他们文件不可用。

FileInfo file = new FileInfo(@"YourfileLocationAndFileName");

try
{
    using(FileStream fileStream1 = file.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None))  
    {
          //Use the filestream to do your readwrite here.
    }
}
catch(IOException ex)
{
    //pop up message box here to inform the user the file is currently in use
}

答案 1 :(得分:1)

尝试使用this ctor打开FileShare.None文件。

答案 2 :(得分:1)

用于序列化对共享资源的访问的互斥/信号量技术稍微复杂一些,但您可以通过Web搜索找到许多示例和解释。此技术将允许您等待文件可用,控制对所需粒度的访问。

基本上,当作者希望锁定文件时,他们必须首先获取互斥,这是一个独占同步对象。如果另一个编写器具有互斥锁,则第二个请求者可以等待它。如果您还想允许只读访问,则可以添加信号量。每个读者都获取一个信号量,表明他们正在读取文件。然后,当作者获得互斥锁时,他们还必须等待每个读者完成,如信号量所示。

实现并不困难,但我可以显示示例代码。正如我所说,你可以在网上找到很多教程和例子。