【问题标题】:Reading the last n lines of a file [duplicate]读取文件的最后 n 行 [重复]
【发布时间】:2015-04-19 08:36:10
【问题描述】:

就像这篇文章的标题所说,我如何读取文件的最后 n 行并将它们存储在列表中?

请记住:

  • 文件很大(介于 5 MB 和 10 MB 之间)
  • 文件可能被其他线程锁定,也可能不被锁定
  • 它被另一个线程访问(当进程完成时,一个新行被添加到文件中)

谢谢。

【问题讨论】:

  • 欢迎来到stackoverflow。请阅读How to Ask
  • 这不是一个“为我写”的论坛。您编写一些代码,我们帮助您修复它,或者您有一个简单的问题,我们回复问题
  • 看来你想写一个“尾巴”的程序。尝试谷歌搜索尾部 c# 文件
  • 同时检查内存映射文件。祝你好运
  • 您可能需要考虑线程之间的同步。否则,读者可能会看到不完整的最后一行,并且通常会在不可预知的地方停止阅读(这可能是也可能不是问题)。

标签: c#


【解决方案1】:

你可以使用这个代码:

            List<string> Temp = new List<string>();
            int SkipLinesNum = 8;
            var GetAllFileToVar = File.ReadLines(@"C:\Sahbak\LinesToList.txt").Skip(SkipLinesNum);
            for (int n = 0; n < GetAllFileToVar.Count(); n++)
            {
                Temp.Add(GetAllFileToVar.ElementAt(0));
            }

现在您有一个名为“Temp”的字符串列表,其中包含从 n=8 开始的所有行。 您可以随时编辑您的“n”号,也可以从用户那里获取。

这是最有效的方法,您不会将所有文件都加载到内存中。

【讨论】:

  • OP 说文件大小为 5 到 10 MB。将所有这些东西加载到内存中似乎效率不高...
  • @Udontknow 看起来也不是太低效,即使不是在你的手机上 ;-)。
  • 好吧,至少它可以工作,但我宁愿让我的程序不浪费资源。如果每个程序都这样工作,那么你的手机使用起来就没有乐趣了...... ;-)
  • 如果您知道需要跳过多少行,这将有效。但是文件在不断变化,所以......谢谢。
  • 您可以随时更改“n”数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多