簡體   English   中英

如何防止多個應用程序打開同一文件

[英]How to prevent more than one application from opening the same file

我有Windows服務,可以將文件上傳到其他ftp站點。

為了加快上傳速度,此服務安裝在3台計算機上。 然后出現問題,因為3個服務都在同一位置查找文件,有時它們只是拾取同一文件,然后引發異常。

如何避免這種情況? .net 4.5使用async方法設計的服務,因此如果應用文件鎖定,性能會降低嗎? 我是這樣想的

  1. 獲取目錄中的所有文件名
  2. 然后鎖定此收藏集
  3. 以某種方式確保每個服務獲得不同的子集合,例如,總共30個文件,然后每個服務獲得10。

但不知道如何

您可以打開該文件以進行獨占讀取,如果該文件失敗,則表示當前有其他服務正在處理該文件,然后移至下一個文件。

File.Open("test.txt", FileMode.Open, FileAccess.Read, FileShare.None);

您可以創建一個隊列。 它可以是MSMQ或其他服務,它將使用文件名加載db Table。 您的其他服務可以使用一些鎖表。

您將擁有一個包含單個記錄的表,您的服務將在事務中將update table t1 set t1.f1=t1.f1 這將阻止其他服務繼續。

在另一個表中,您有文件列表和一個標志(如果已使用)。

考慮一種僅讀取這些文件並加載文件名表的服務。 其他3個服務-端點,將鎖定鎖表記錄,然后繼續讀取n文件名並將它們標記為已使用。 加載文件后,即可刪除文件名。 如果服務在采取和刪除之間失敗:在下一個過程開始時,檢查時間戳記。 如果文件已被占用,可以說昨天並且記錄仍然存在,可能是需要再次處理它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM