无法读取文件中其他进程正在使用的所有行
本文关键字:读取 文件 进程 其他 | 更新日期: 2023-09-27 18:36:23
我正在尝试读取某些程序正在使用的所有日志文件行。
当我尝试这样做时,我收到异常:
System.IO.IOException was unhandled : file used by another process
所以我在网上搜索并找到了许多解决方案:
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))
法典:
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;
}
在菜单中使用 File.Open 的重载单击事件处理程序,如下所示:
File.Open(@"C:'process.log", FileMode.Open,FileAccess.ReadWrite, FileShare.ReadWrite);
最后一个参数是一个值,指定其他线程对文件的访问类型。
请参阅MSDN的这篇文章