我想监控我的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来检测更改并使用索引字典发送新行(键:文件路径,值:最后一行)。 streamreader的问题在于我不知道如何获得特定的行。之前我正在使用File.ReadAllLines(文件路径),因为它是一个数组,所以很容易得到特定的行,但我移动到了流读取器,因为我得到了异常(该文件被另一个进程使用)。
编辑:谢谢你的回答,它完美无缺。我想知道是否有可能,同样的想法,仍然可以获得特定的新行和在此行之后添加的所有新行,直到流结束。 (因为新添加的日志可以写在多行上)
答案 0 :(得分:-1)
由于你无法预测文件中第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();
}
}