目前我正在使用File.ReadAllText()读取文件内容,但现在我需要读取txt文件中的最后x行。我怎么能这样做?
myfile.txt
line1content
line2content
line3content
line4content
string contentOfLastTwoLines = ...
答案 0 :(得分:8)
这个怎么样?
List <string> text = File.ReadLines("file.txt").Reverse().Take(2).ToList()
答案 1 :(得分:5)
使用Queue<string>
存储最后X
行并替换当前读取的第一行:
int x = 4; // number of lines you want to get
var buffor = new Queue<string>(x);
var file = new StreamReader("Input.txt");
while (!file.EndOfStream)
{
string line = file.ReadLine();
if (buffor.Count >= x)
buffor.Dequeue();
buffor.Enqueue(line);
}
string[] lastLines = buffor.ToArray();
string contentOfLastLines = String.Join(Environment.NewLine, lastLines);
答案 2 :(得分:4)
您可以使用ReadLines
来避免将整个文件读入内存,如下所示:
const int neededLines = 5;
var lines = new List<String>();
foreach (var s in File.ReadLines("c:\\myfile.txt")) {
lines.Add(s);
if (lines.Count > neededLines) {
lines.RemoveAt(0);
}
}
for
循环完成后,lines
列表最多包含文件中最后neededLines
个文本。当然,如果文件不包含所需的行数,则lines
列表中将放置更少的行。
答案 3 :(得分:3)
将行读入数组,然后提取最后两行:
string[] lines = File.ReadAllLines();
string last2 = lines[lines.Count-2] + Environment.NewLine + lines[lines.Count-1];
假设您的文件相当小,那么只需阅读整个内容并丢弃您不需要的文件就更容易了。
答案 4 :(得分:0)
由于读取文件是线性完成的,通常是逐行完成的。只需逐行阅读并记住最后两行(如果需要,可以使用队列或其他内容......或仅使用两个字符串变量)。当你到达EOF时,你将拥有最后两行。
答案 5 :(得分:0)
您想使用ReverseLineReader向后读取文件:
如何使用C#
中的迭代器反向读取文本文件然后跑。在它上面拿(2)。 var lines = new ReverseLineReader(filename); var last = lines.Take(2);
OR
使用System.IO.StreamReader。
string line1, line2;
using(StreamReader reader = new StreamReader("myFile.txt")) {
line1 = reader.ReadLine();
line2 = reader.ReadLine();
}