2013-01-11 48 views
4

存在一個文件 - 存儲在供應商經常更新的外部服務器上。我的應用程序每隔一分鐘就會查詢一次該文件。我所做的只是閱讀文件。讀取正在寫入的文件 - 鎖定它?

我很擔心,做這個我可能會無意中鎖定文件,因此它不能由廠商也寫。這有可能嗎?

親切的問候

+2

你如何閱讀文件? 「外部服務器」是指網絡? NFS? HTTP? – Thilo

+0

通過使用xpath讀取文件。該文件通過網絡訪問 – Biscuit128

+0

作家只附加數據,還是更新?在第二種情況下,我會嘗試找到不同的解決方案。 – mrab

回答

0

我面臨這個問題幾次,彼得Lawrey說,有沒有做到這一點任何便攜式方式,如果你的環境是UNIX,這不應該是一個問題,在所有這些併發訪問條件由操作系統正確管理。然而,窗戶根本無法處理(是的,這是使用業餘操作系統進行生產作業的結果,哈哈)。

現在,據說,那裏是解決這一點,如果你的供應商是非常靈活的方式。他們可以寫入臨時文件,並在完成後將臨時文件移動到最終目的地。通過這樣做,您可以避免任何併發訪問您與供應商之間的文件。

另一種方法是精確(難嗎?)知道你的供應商更新的時間,避免在一段時間幀讀取文件。例如,如果您的供應商每小時更新文件,請避免從五到五小時讀到五小時。

希望它有幫助。

1

繼Eric的答案 - 你可以檢查臨時文件的最後修改屬性,只用當它改變了你的「工作」文件合併它 - 這應該保護你的讀/寫衝突,只有剛過合併文件供應商已寫入臨時文件。儘管這很麻煩,並且mrab的評論是有效的,但應該找到更好的解決方案。

0

有卷的Windows Shadow Copy服務。這將允許讀取備份副本。

如果第三方軟件是在java中太,並使用記錄器,這應該是tweakable:每分鐘的寫作從10個文件左右下。

我想嘗試無情地讀取文件(在上次讀取修改),直到出了問題。也許你可以在週末或午夜進行數百次閱讀測試,但不會造成任何傷害。

我的回答: 也許你需要一個本地觀看節目,a watch service for a directoryr,是等待,直到文件被修改,然後使快速COOY;之後允許傳送副本。