需要从大日志文件中取得最后一行。什么是最好的方式来做到这一点?如何高效地读取文本文件的最后一行
5
A
回答
12
你想读的向后使用ReverseLineReader
文件:
How to read a text file reversely with iterator in C#
然后在其上运行.Take(1)
。
var lines = new ReverseLineReader(filename);
var last = lines.Take(1);
你要使用Jon Skeet's库MiscUtil,而不是直接复制/粘贴代码。
-2
或者你可以做两个线路(.NET 4只)
var lines = File.ReadLines(path);
string line = lines.Last();
+2
这读取完整的文件内容到内存 – RJFalconer
+0
虽然这可以做的工作,这是令人难以置信的内存效率低下(如RJFalconer笔记),也有延迟的一个很大 - 请记住,阅读文件,你可以在程序中做的最慢的事情之一。如果你只是偶尔阅读,这可能奏效,但是这是从一个强大的,专业的解决方案_far_。 –
2
String lastline="";
String filedata;
// Open file to read
var fullfiledata = new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader sr = new StreamReader(fullfiledata);
//long offset = sr.BaseStream.Length - ((sr.BaseStream.Length * lengthWeNeed)/100);
// Assuming a line doesnt have more than 500 characters, else use above formula
long offset = sr.BaseStream.Length - 500;
//directly move the last 500th position
sr.BaseStream.Seek(offset, SeekOrigin.Begin);
//From there read lines, not whole file
while (!sr.EndOfStream)
{
filedata = sr.ReadLine();
// Interate to see last line
if (sr.Peek() == -1)
{
lastline = filedata;
}
}
return lastline;
}
相关问题
- 1. 如何高效地读取C++文件的最后一行
- 2. 如何在java中高效地读取大文本文件
- 3. 高效地读取和解析大型单行文本文件
- 4. 如何在Delphi中高效地读取多个文件的第一行文件
- 5. 如何读取最后一行在C#中的文本文件,第一行
- 6. 如何读取文本文件中的最后10行?
- 7. 读取文件的最后一行
- 8. 从文本文件中读取第5行最后一行
- 9. 读取文本文件的最后一行C#
- 10. 读取gzip文本文件的最后一行
- 11. 从读行读取最后一组文本,并更改文本?
- 12. 在C++中高效地读取大文本文件
- 13. App Engine中最快/最高效的本地文件读取或memcache命中?
- 14. 用C#读取文件最后一行的高性能方法
- 15. 从文件中读取最后一行
- 16. 如何从最后一行读取文本文件到第一个
- 17. 如何使用java读取文本文件中的最后一行
- 18. 如何在Lua中只读取文本文件的最后一行?
- 19. 如何读取文本文件中每行的最后一位数字?
- 20. 如何读取目标文本文件中的最后n行文件C
- 21. 如何读取1GB的文件的最后一行 - java的
- 22. 高效地从文件的各行读取标记
- 23. 如何不读取文件中的最后一行?
- 24. 如何通过跳过文件中的第一行和最后一行来读取文本文件
- 25. 如何阅读在线文件的最后一行,从文件
- 26. 如何高效地用python读取cap文件?
- 27. 如何有效读取大文本文件中的行数
- 28. Node.js:高效地读取一系列行
- 29. 这是读取Java文本文件最后一行的最佳方法吗?
- 30. c +最快的方式来只读取最后一行文本文件?
不错!谢谢你,会试试看。 – 0x49D1
奇怪的是,图书馆不在Nuget ..谢谢! – 0x49D1
见我的答案可能重复http://stackoverflow.com/a/33907602/4821032 –