2017-10-13 122 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 
} 

代碼是從回購樣品取,所以這是筆者建議使用他的圖書館該怎麼走。

我有機會使用它,我發現它既有用又可靠。

相關問題