2009-11-18 115 views
-2

我們有如下要求來處理C#代碼中的XML文件。 請以實現此目的的方式提供邏輯/解決方案。鎖定XML文件

問題: 我們有一個XML文件,假設它有test.xml。 當用戶'A'使用test.xml時,我們需要鎖定這個XML並像讀/寫等那樣進行處理。 與此同時,用戶'B'也嘗試訪問test.xml,我們希望用戶'B'不能打開的要求,'B'必須等待,直到用戶'A'的鎖被釋放或解鎖。

此外,我們不應該得到任何錯誤/異常,直到用戶'B'處於等待模式,我們不希望向用戶顯示任何消息。 由於性能問題,我們不希望在此方案中使用FileStreams。

任何人都可以幫助在這方面如何克服這種類型的問題。

請注意: 我們不希望使用文件流。 請在這方面提出一個替代解決方案。

+0

@sukumar,這似乎是其中一個'問題',其中沒有答案是不夠好的。這也許可以解釋爲什麼你被擱置了...... – pavium 2009-11-18 06:04:15

+0

@sukumar,我發佈了一個建議使用互斥體的答案。你有沒有機會看到它? – MSIL 2009-11-19 06:50:49

回答

0

我想你必須以讀/寫模式打開文件並進行某種循環來檢查文件是否打開。

try { 
    FileStream fileStream = new FileStream(@"c:\file.txt", FileMode.Open, FileAccess.Write); 
    } catch(Exception e){ 
    // TODO check if access denied 
    } 

如果您在我建議您查看信號燈之前更喜歡做這些測試。

+0

我們不想使用任何FileStream概念,因爲它會降低大型XML文件的性能。 關於性能問題,我們沒有使用FileStreams。 如果您能提出一種替代解決方案,將非常感激。 – sukumar 2009-11-18 05:44:11

+0

@sukumar:我建議使用'semaphores'或'mutex' – RageZ 2009-11-18 05:56:57

0

爲什麼不使用互斥體在這種情況下 - 如果一個用戶打開並在其上工作,您想限制其他用戶對文件的訪問權限。

4

我熟悉的技術是創建一個鎖文件作爲您正在鎖定的文件的兄弟。所有客戶端必須創建該鎖定文件,如果他們想要對該文件進行讀寫權限的話,如果沒有創建鎖定文件,則不能讀取/寫入文件。當他們完成讀取/寫入時,他們關閉對文件的訪問並刪除鎖定文件。然後,等待寫入的客戶端應該輪詢鎖定文件的存在,當它不存在時,他們創建它並自由使用該文件。