如何访问另一个进程正在使用的c#中的文本文件

时间:2015-09-02 08:28:02

标签: c# system.io.file

我有modscan使用的文本文件将数据写入文件。在特定时间,我必须读取数据并保存在数据库中。在离线模式下;没有modscan使用它我可以读取数据,并很好地保存在数据库中。然而,因为它与modscan在线,它提供了异常

  

无法访问其他进程使用的文件。

我的代码:

using System.IO;
string path = dt.Rows[i][11].ToString();
string[] lines = System.IO.File.ReadAllLines(@path);

路径有"E:\Metertxt\02.txt"

所以我需要做些什么改变才能在不干扰modscan的情况下阅读它。 我用谷歌搜索,我发现这可能有用,但我不知道如何使用它

  

FileShare.ReadWrite

2 个答案:

答案 0 :(得分:2)

您可以使用FileStream打开已在其他应用程序中打开的文件。如果你想逐行阅读,那么你需要一个StreamReader。这是有效的,假设文件编码为UTF8:

using (var stream = new FileStream(@"c:\tmp\locked.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    using (var reader = new StreamReader(stream, Encoding.UTF8))
    {
        string line;

        while ((line = reader.ReadLine()) != null)
        {
            // Do something with line, e.g. add to a list or whatever.
            Console.WriteLine(line);
        }
    }
}

如果确实需要string[]

,请选择
var lines = new List<string>();

using (var stream = new FileStream(@"c:\tmp\locked.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    using (var reader = new StreamReader(stream, Encoding.UTF8))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            lines.Add(line);
        }
    }
}

// Now you have a List<string>, which can be converted to a string[] if you really need one.
var stringArray = lines.ToArray();

答案 1 :(得分:0)

FileStream fstream = new FileStream("@path", FileMode.Open,FileAccess.Read, FileShare.ReadWrite);
StreamReader sreader = new StreamReader(fstream);
List<string> lines = new List<string>();
string line;
while((line = sreader.ReadeLine()) != null)
    lines.Add(line);
//do something with the lines
//if you need all lines at once,
string allLines = sreader.ReadToEnd();