使用流从文件中读取特定行

本文关键字:读取 文件 | 更新日期: 2023-09-27 18:10:32

我想监控我的iis日志文件,要做到这一点,我读取它们:

using (var fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            using (var sr = new StreamReader(fs, Encoding.Default))
            {
                while (sr.Peek() > 0)
                {
                    client.send(sr.ReadLine());
                }
            }

然后将行发送到我的数据库。我还使用FileSystemWatcher来检测更改并通过使用索引字典(键:文件路径,值:最后一行)发送新行。流阅读器的问题是,我不知道如何得到一个特定的行。我用的是File。ReadAllLines(文件路径)之前,它很容易获得特定的行,因为它是一个数组,但我移动到流阅读器,因为我得到异常(文件被另一个进程使用)。

编辑:谢谢你的回答,它工作完美。我想知道是否有可能,用同样的想法,仍然得到特定的新行和所有的新行添加到这行之后,直到流结束。(因为新添加的日志可以写在多行上)

使用流从文件中读取特定行

由于无法预测文件中第i行的位置(可以吗?),因此还必须读取前面的所有行。如果行号很小,这可能比ReadAllLines方法更有效。试试这个

string GetLine(string fileName, int line)
{
   using (var sr = new StreamReader(fileName)) {
       for (int i = 1; i < line; i++)
          sr.ReadLine();
       return sr.ReadLine();
   }
}