只读给定txt文件中的最后x行

时间:2013-04-07 21:01:15

标签: c#

目前我正在使用File.ReadAllText()读取文件内容,但现在我需要读取txt文件中的最后x行。我怎么能这样做?

myfile.txt

的内容
line1content 
line2content
line3content
line4content 

string contentOfLastTwoLines = ...

6 个答案:

答案 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();
}