2017-10-13 129 views
-1

我目前正在编写C#中的一个小应用程序来处理批量的图像,并把它们放到PDF中。每批图像都存储在网络共享的自己的文件夹中。该应用程序将使用户能够在创建PDF之前对来自单个批次的随机数量的图像执行QA检查。最多可以有4-6个用户在个人桌面上运行此应用程序,以访问存储映像批处理的位置。防止多个用户访问相同的文件夹C#

我现在遇到的问题是如何防止2个用户处理同一批次?最初我想过使用FileSystemWatcher检查每个文件夹的最后访问权限,但是阅读FileSystemWatcher如何引发事件似乎并不合适。我曾考虑过使用轮询来检查每个文件夹中的图像以使用文件流进行文件访问,但我认为这也不适合(我可能是错的)。

什么是最简单的解决方案?

+0

不允许直接访问网络驱动器。通过只允许单个用户访问文件夹中的图像的内容进行代理。 – TZHX

+0

在文件夹中写入一个'bob.lock'文件,以指示在开始处理该文件夹之前正在处理文件夹,并在完成后将其删除。 _您可能还必须考虑检测机器是否崩溃并手动删除锁定文件的机制._ – mjwills

回答

0

我会使用一个包含文件的锁文件,如this

代码非常简单:

var fileLock = new SimpleFileLock("networkFolder/file.lock", TimeSpan.FromMinutes(timeout)); 

其中timeout用于解锁文件夹,如果使用它的过程中崩溃(这样,它并不能永远呆在锁定)。

然后,每次一个进程中需要使用该目录,你去用一个简单的检查:

if (fileLock.TryAcquireLock()) 
{ 
    //Lock acquired - do your work here 
} 
else 
{ 
    //Failed to acquire lock - SpinWait or do something else 
} 

代码是从回购样品取,所以这是笔者建议使用他的图书馆该怎么走。

我有机会使用它,我发现它既有用又可靠。

相关问题