无法读取另一个进程正在使用的文件中的所有行

E23*_*235 2 c# file

我正在尝试读取某个程序正在使用的所有日志文件行。

当我尝试这样做时,我收到异常:

System.IO.IOException was unhandled  : file used by another process
Run Code Online (Sandbox Code Playgroud)

所以我在网上搜索并找到了许多解决方案:
C# 异常。另一个进程
正在使用文件 读取另一个进程正在使用的日志
文件 在 C# 中读取锁定文件的侵入性最小的方法是什么(可能在不安全模式下)?
C#进程无法访问文件''',因为它正在被另一个进程使用
文件正在被另一个进程使用
http://coding.infoconex.com/post/2009/04/21/How-do-I-open -a-file-that-is-in-use-in-C

常见的解决方案是使用using包装FileStream和添加FileShare.ReadWrite.

我尝试了这些解决方案,但我仍然收到另一个进程正在使用该文件的异常。

在我下面的代码中,我打开文件D:\process.log以使用该文件(用于测试),然后尝试打开该文件。
例外是在行:

 using (FileStream fileStream = File.Open(i_FileNameAndPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
Run Code Online (Sandbox Code Playgroud)

代码:

 private void openToolStripMenuItem_Click(object sender, EventArgs e)
    {
        OpenFileDialog openFileDialog = new OpenFileDialog();

        DialogResult dialogResult = openFileDialog.ShowDialog();
        if (dialogResult == DialogResult.OK)
        {
          listView.Items.Clear();
          File.Open(@"D:\process.log", FileMode.Open);  //make the file being used
          String fileNameAndPath = openFileDialog.FileName;
          String[] fileContent = readAllLines(fileNameAndPath);
        }
}

private String[] readAllLines(String i_FileNameAndPath)
{
    String[] o_Lines = null;
    int i = 0;
    using (FileStream fileStream = File.Open(i_FileNameAndPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    {
        using (StreamReader streamReader = new StreamReader(fileStream))
        {
            while (streamReader.Peek() > -1)
            {
                String line = streamReader.ReadLine();
                //o_Lines[i] = line;
                i++;
            }
        }
    }

    return o_Lines;
}
Run Code Online (Sandbox Code Playgroud)

Bal*_*kas 5

在您的 menuclick 事件处理程序中使用 File.Open 的重载,如下所示:

File.Open(@"C:\process.log", FileMode.Open,FileAccess.ReadWrite, FileShare.ReadWrite);
Run Code Online (Sandbox Code Playgroud)

最后一个参数是一个值,指定其他线程对文件的访问类型。

从 msdn这篇文章