最近遇到這樣一個需求,用C#寫一個界面,在界面上實時輸出一個日志文件。
實時檢測文件變化,以便刷新界面顯示,可以用FileSystemWatcher組件,響應Changed事件即可。
關鍵是在Changed事件響應函數中,如果以傳統只讀模式打開文件句柄,老是會提示: 文件正由另一進程使用,因此該進程無法訪問該文件。
最后發現構造文件流時除了常見的FileMode外,還可以指定FileShare參數,實現控制其他 System.IO.FileStream 對象對同一文件的共享操作,代碼如下:
1 FileStream stream = new FileStream(Directory.GetCurrentDirectory() + "\\log\\log", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 2 StreamReader reader = new StreamReader(stream, Encoding.UTF8); 3 String value = reader.ReadToEnd();