2013-12-17 39 views
2

我正在嘗試從文件夾中讀取文本文件,但當前該文件正在被另一個進程訪問。因此,我收到了一個異常:「...文件正在被另一個進程訪問」。打開另一個進程正在使用的文件

我使用下面的代碼

class program 
{ 
    static void Main(string[] args) 
    { 
    string lFileData = string.Empty; 
    try 
    { 
     if (args.Count() > 0) 
      lFileData = ReadLogFile(args[0]); 

     Console.WriteLine("{0}", lFileData); 

    } 
    catch(Exception ex) 
    { 
     Console.WriteLine("{0}", ex.Message.ToString()); 
    } 
    Console.ReadLine(); 
    } 

    public static string ReadLogFile(string sFileLocation) 
    { 
    string lResult = string.Empty; 
    var inStream = new FileStream(sFileLocation, FileMode.Open, FileAccess.Read, FileShare.Read);    
    using (var reader = new StreamReader(inStream)) 
    { 
     lResult= reader.ReadToEnd(); 
    } 
    return lResult; 
    } 
} 

但是,當我們通過記事本打開相同的文件是顯示文本文件,即使文件正被另一個進程訪問的內容。

我們希望這樣做 - 在不做任何修改的情況下閱讀文件的內容。 所以我想這:

var inStream = new FileStream(sFileLocation, FileMode.Open, FileAccess.Read, FileShare.Read); 

然而,即使這樣,我們得到同樣的異常。

有人可以幫助解決這個問題?

+0

你能提供證明問題的代碼或步驟嗎?我不清楚你是如何重現這個問題的。 –

+1

似乎在這裏http://stackoverflow.com/questions/9759697/reading-a-file-used-by-another-process被討論了相同的問題 – Artiom

+2

使用'FileShare.ReadWrite'? –

回答

0
System.IO.FileStream fs = new System.IO.FileStream(txtFilePath.Text, System.IO.FileMode.Open, System.IO.FileAccess.Read,System.IO.FileShare.ReadWrite); 

System.IO.StreamReader sr = new System.IO.StreamReader(fs); 

List<String> lst = new List<string>(); 

while (!sr.EndOfStream) 
    lst.Add(sr.ReadLine()); 

注意改變爲ReadWrite。

http://msdn.microsoft.com/en-us/library/system.io.fileshare(v=vs.110).aspx

3

什麼記事本可以做的是使該文件的副本,然後從該讀。如果您嘗試使用記事本進行保存,則會出現您遇到的錯誤。

因此,解決此問題的一種方法是複製文件的副本(File.Copy())並打開該文件。

0
using (FileStream fs = 
    new FileStream(sFileLocation, 
     FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 

你的文件可能被寫鎖定,因此與FileShare.ReadWrite嘗試。

相關問題