【发布时间】:2011-01-06 20:53:03
【问题描述】:
需要一段可以读出日志文件最后“n 行”的代码。我从网上想出了以下代码。我对 C 语言有点陌生。由于日志文件可能是 很大,我想避免读取整个文件的开销。有人可以建议任何性能增强。我真的不想阅读每个字符并改变位置。
var reader = new StreamReader(filePath, Encoding.ASCII);
reader.BaseStream.Seek(0, SeekOrigin.End);
var count = 0;
while (count <= tailCount)
{
if (reader.BaseStream.Position <= 0) break;
reader.BaseStream.Position--;
int c = reader.Read();
if (reader.BaseStream.Position <= 0) break;
reader.BaseStream.Position--;
if (c == '\n')
{
++count;
}
}
var str = reader.ReadToEnd();
【问题讨论】:
-
你不能像那样使用 StreamReader。
-
看看stackoverflow.com/questions/1271225/…。然后,您可以在 IEnumerable 上使用 LINQ 扩展
.Last()来获取最后 N 行 -
@Russ:不,你不能。 LINQ 无法有效地为您提供最后 n 行。
-
@Slaks - 哎呀!我以为最后 N 件物品超载了……这是漫长的一天!现在想想,最后需要回溯一次才能得到 N 个项目。
标签: c# .net performance file-io