2015-05-01 56 views
0

我在生產服務器中有一個日誌文件,它不斷被程序更新(非常頻繁地說,例如每秒5到10次)。是否讀取只讀文件鎖定文件

這個日誌文件顯然是隻讀的開發服務器,並有可能文件大小增加到~4MB。

我在開發環境中有一個程序。定期讀取文件內容並查找特定的行/關鍵字。

************************ 
If File.Exists(targetFile) Then 
      Using fs As FileStream = New FileStream(targetFile,    FileMode.Open, FileAccess.Read) 
       Using sr As StreamReader = New StreamReader(fs) 
        Dim all As String = sr.ReadToEnd() 
        allLines = all.Split(Environment.NewLine) 
       End Using 
      End Using 
End If 
******************************** 

我的問題是,它看起來像從dev服務器讀取鎖定文件[不確定]。所以該服務是PRD無法訪問該文件並拋出錯誤。

回答

4

您正在使用FileStream構造函數的this overload。該文件說,被賦予

構造函數讀取文件/寫訪問,並打開 共享讀訪問(即請求通過這個來打開 書面文件或其他進程將失敗直到FileStream 對象已關閉,但讀取嘗試將成功)。

如果你想允許其他進程讀取和寫入文件,必須在FileShare.ReadWrite模式下打開,使用this overload

+0

正確的是,第四個參數FileShare是答案 - 但看起來.Read或.ReadWrite會允許其他人訪問該文件。 – rheitzman

+0

@rheitzman OP說生產服務器在流打開時不能寫入日誌文件。因此,您需要使用Write或ReadWrite打開(取決於服務器是否也從自己的日誌文件中讀取)。 –

+0

我認爲問題是開發程序意外地鎖定文件導致服務器錯誤。你可能是正確的,兩個程序都需要使用FileShare()屬性,但我的猜測是隻是改變開發計劃將做的伎倆。 – rheitzman