打开另一个进程正在使用的文件

时间:2013-12-17 13:13:12

标签: c# .net filestream

我正在尝试从文件夹中读取文本文件,但当前该文件正由另一个进程访问。因此,我得到一个例外,“......文件被另一个进程访问”。

我正在使用以下代码

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); 

然而,即便如此,我们也会得到同样的例外。

有人可以帮忙解决这个问题吗?

3 个答案:

答案 0 :(得分:3)

记事本可能正在做的是制作文件的副本,然后从中读取。如果您尝试在记事本中保存,它将为您提供您遇到的错误。

因此,解决此问题的一种方法是制作文件的副本(File.Copy())并打开它。

答案 1 :(得分: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

答案 2 :(得分:0)

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

您的文件可能已被写锁定,因此请尝试使用FileShare.ReadWrite