我需要讀取基於文本的日誌文件以檢查某些內容(完成備份作業)。顯然,該文件在作業完成時寫入。讀取/寫入一個肯定會隨機使用的文件
我的問題是,我怎樣才能(或者應該如何編寫代碼)讀取文件,考慮到文件可能被鎖定,或者在需要讀取時被我的進程鎖定,而不會導致任何可靠性關注。
我需要讀取基於文本的日誌文件以檢查某些內容(完成備份作業)。顯然,該文件在作業完成時寫入。讀取/寫入一個肯定會隨機使用的文件
我的問題是,我怎樣才能(或者應該如何編寫代碼)讀取文件,考慮到文件可能被鎖定,或者在需要讀取時被我的進程鎖定,而不會導致任何可靠性關注。
假設寫入過程在打開文件時至少指定了System.IO.FileShare.Read
,那麼應該可以在文本文件仍在寫入時讀取它。
除了由@BrokenGlass答案:
只有打開文件進行讀取。如果您嘗試打開它以進行讀/寫訪問,則很可能(幾乎可以肯定)失敗 - 您可能無法打開它,並且/或者您可能會阻止另一個進程能夠寫入該進程。
當您不讀取文件時關閉該文件,以最大限度地減少可能導致其他進程出現問題的機會。
如果寫入過程在寫入文件時拒絕讀取訪問,則可能需要編寫某種形式的「重試循環」,它允許應用程序等待(保持重試),直到文件變爲可讀。只要嘗試打開文件(並捕獲錯誤) - 如果失敗,請稍等片刻休眠(),然後重試。 (但是,如果你正在監視一個日誌文件,你可能會希望繼續檢查它以獲取更多數據)
http://stackoverflow.com/questions/1304/how-to-check-for -file-lock-in-c – craig1231 2011-12-30 12:08:22
正在使用中!=已鎖定 – 2011-12-30 12:09:18
要讀取還是要寫入該文件? – 2011-12-30 12:10:39