我正在使用FileSystemWatcher
來監視日誌文件的更改。System.IO.IOException:進程無法訪問該文件,因爲它正在被另一個進程使用
日誌文件由第三方應用程序編寫。
一旦改變被觸發時,我試圖讀取使用的文件:
using (FileStream fs = new FileStream(e.FullPath, FileMode.Open,
FileAccess.Read, FileShare.ReadWrite))
{
StreamReader sr = new StreamReader(fs);
string s = sr.ReadLine();
}
有時它失敗的using
線。
其他時間它在sr.ReadLine()
上失敗,我認爲這是因爲第三方系統當前正在訪問該文件。
我以爲通過設置FileAccess.Read
我應該可以隨時讀取文件?
如何確保這不會導致異常,還是需要循環播放,直到成功讀取?
有時使用這種方法,您可以重試幾次(嘗試之間睡幾百毫秒)。但是,如果日誌文件被第三方應用程序重複寫入,則可能最終通過在第三方應用程序嘗試寫入日誌文件時打開日誌文件來破壞它... –
如果其他進程具有排它鎖在文件上,你可以做的不多,只能等待它關閉文件。啓動定期嘗試打開文件的定時器。 – JosephHirn
你應該關閉你的流媒體閱讀器 – Sayse