2011-12-30 39 views
3

我需要讀取基於文本的日誌文件以檢查某些內容(完成備份作業)。顯然,該文件在作業完成時寫入。讀取/寫入一個肯定會隨機使用的文件

我的問題是,我怎樣才能(或者應該如何編寫代碼)讀取文件,考慮到文件可能被鎖定,或者在需要讀取時被我的進程鎖定,而不會導致任何可靠性關注。

+0

http://stackoverflow.com/questions/1304/how-to-check-for -file-lock-in-c – craig1231 2011-12-30 12:08:22

+1

正在使用中!=已鎖定 – 2011-12-30 12:09:18

+0

要讀取還是要寫入該文件? – 2011-12-30 12:10:39

回答

-1

正在寫入文件時,對於嘗試在寫入模式中嘗試打開文件的所有其他進程,它被鎖定。 閱讀模式將始終可用。

但是,如果您的書寫過程在您的閱讀過程中已經打開文件時保存了更改,則在您再次刷新(關閉 - 打開)文件之前,更改將不會反映在那裏。

+0

讀取共享不保證始終可用 - 這取決於作者是否指定了讀共享。 – Polyfun 2011-12-30 14:27:16

+0

如果您明確禁用讀取權限是。但如果這是一個給定的話,那麼這整個問題似乎是毫無意義的? – Flater 2012-01-02 08:41:31

3

除了由@BrokenGlass答案:

  • 只有打開文件進行讀取。如果您嘗試打開它以進行讀/寫訪問,則很可能(幾乎可以肯定)失敗 - 您可能無法打開它,並且/或者您可能會阻止另一個進程能夠寫入該進程。

  • 當您不讀取文件時關閉該文件,以最大限度地減少可能導致其他進程出現問題的機會。

  • 如果寫入過程在寫入文件時拒絕讀取訪問,則可能需要編寫某種形式的「重試循環」,它允許應用程序等待(保持重試),直到文件變爲可讀。只要嘗試打開文件(並捕獲錯誤) - 如果失敗,請稍等片刻休眠(),然後重試。 (但是,如果你正在監視一個日誌文件,你可能會希望繼續檢查它以獲取更多數據)