2016-04-11 33 views
1

我有一個C#應用程序試圖讀取另一個應用程序正在寫入的日誌文件。當我嘗試讀取文件時,出現IOException讀取已被另一個進程使用的文件

「進程無法訪問該文件...因爲它正在被其他進程使用 」。

我嘗試使用至今有以下幾種,但它們都沒有解決這個問題

var log = File.ReadAllText(logPath); 

var stream = new FileStream(logPath, FileMode.Open); 

using (var stream = File.Open(logPath, FileMode.Open)) 
    { 

    } 
+1

http://stackoverflow.com/questions/3709104/how-do-you-read-a-file-which-is-in-use –

+0

[stackoverflow.com/questions/4964588/open-file-readonly] (http://stackoverflow.com/questions/4964588/open-file-readonly) –

回答

0

試試這個:

FileStream logFileStream = new FileStream("c:\test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
StreamReader logFileReader = new StreamReader(logFileStream); 

while (!logFileReader.EndOfStream) 
{ 
    string line = logFileReader.ReadLine(); 
    // Your code here 
} 

// Clean up 
logFileReader.Close(); 
logFileStream.Close(); 

與MethodMan的建議編輯

using(FileStream logFileStream = new FileStream(@"c:\test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite) 
{ 
    using(StreamRead logFileReader = new StreamReader(logFileStream)) 
    { 
     string text = logFileReader.ReadToEnd(); 
     // Your code.. 
    } 
} 
+1

我會圍繞一個使用代碼來處理FileStream和StreamReader對象的自動延遲只是一個建議。爲避免編譯器將單個反斜槓視爲轉義字符,還應該使用'@「c:\ test.txt」''作爲轉換字符。 – MethodMan

+0

您也可以使用StreamReader的ReadToEnd方法閱讀一行,以縮短您的代碼。 –

0

如果「其他應用程序」未使用「共享」,則無法執行任何操作。在創建/打開文件時閱讀。

相關問題