2016-04-28 39 views
2

我正在訪問由第三方工具正在更新的文件,該文件不斷從com-port捕獲數據並填充文件。 對於這個文件,在填充數據時,我想對內容進行少量檢查並記錄我的目的狀態。FileInfo.length和File.ReadAllText

而且,做了檢查,我使用FileInfo.Length操作知道文件的長度,我也用File.ReadAllText(Filename).Contains(SearchText)檢查,如果所需的關鍵字是文件可用(這是在不斷更新)。 我的問題是,使用FileInfo.LengthFile.ReadAllText來運行的文件是否會影響第三方工具所做的更新操作。 由於這些檢查,第三方工具將更新文件是否會有數據丟失?

此外,會有什麼效果,如延遲更新此文件等?

+0

是的,這很可能。 File.ReadAllText()將文件鎖定在阻止應用程序寫入的文件上。您必須使用通過FileShare.ReadWrite打開的FileStream並將其傳遞給StreamReader。這也是一個相當昂貴的操作,這些文件可能會變得很大,最終變成DOS攻擊。 –

+0

好的。我認爲你正在回答我的第二個問題(另外,是否會有任何影響,如延遲更新此文件等?)...在這種情況下,至少當File.ReadAllText釋放鎖定時,將第三方工具能夠繼續更新文件(不丟失數據)?延遲應該很好,但不會丟失數據 – giboo

回答

3

當另一個進程正在寫入文件時,讀取文件是安全的。該進程將具有寫入鎖定,並且您的進程將具有讀取鎖定。

此外,會有任何影響,如延遲更新此文件等?

可能影響寫作過程的表現。考慮你的存儲的IOPS。如果你的存儲過載,你對它的任何操作都將與你的寫作過程相抗衡,可能會降低寫入速度。

1

簡短的回答,只讀操作不會影響其他的寫操作

號。