C# 文本文件的最后三行

C# 文本文件的最后三行,c#,C#,我需要一点帮助!我不知道如何将文件的最后三行存储到单独的字符串中。如果可能的话,数组也可以工作 string[] lines = File.ReadAllLines(myfile); 如果有人可以使用数组来实现这一点,我将如何仅获取最后三行。请注意,我不知道文件的长度 谢谢效率不高,但它可以工作:行。反转().Take(3)。反转() 备选方案: line1 = lines[lines.length-3] // Third to last line2 = lines[lines.length-

我需要一点帮助!我不知道如何将文件的最后三行存储到单独的字符串中。如果可能的话,数组也可以工作

string[] lines = File.ReadAllLines(myfile);
如果有人可以使用数组来实现这一点,我将如何仅获取最后三行。请注意,我不知道文件的长度


谢谢

效率不高,但它可以工作:
行。反转().Take(3)。反转()

备选方案:

line1 = lines[lines.length-3] // Third to last
line2 = lines[lines.length-2]
line3 = lines[lines.length-1] // Last line

这似乎有点太简单了

使现代化 如果阵列的长度小于3,则为。这应该基于计数打印最后三行,或者如果i==-1,则打印少于三行

string[] lines = File.ReadAllLines(myFile)
// Get the last three lines
int count = 0;
for (int i = lines.length - 1; i >= 0; i++)
{
    Console.WriteLine(lines[i]);
    count++;
    if (count == 3) 
    {
        break;
    }
}

如果您不需要使用
ReadAllLines
在一个大数组中加载文件中的所有行,而只需一次读取一行,只读取最后(3)行,则可以执行以下操作:

var threeLines = new string[3];
var nLines = 0;
foreach (var line in File.ReadLines(myFile))
{
    var ndx = nLines % 3;
    threeLines[ndx] = line;
    nLines++;
}
此外,如果输入中的行数少于3行,则不会崩溃

for (var i = 0; i < Math.Min(nLines, 3); i++)
    Console.WriteLine(threeLines[i]);

OP希望这些行进入单独的字符串。您正在将它们放入一个数组中。last3line[0]、last3line[1]和last3line[2]是非常独立的字符串。它们也碰巧在一个阵列中。但这一事实并不能阻止它们分开。这里唯一可能的问题是,如果
行。长度
<3
,我很难说这是边缘情况-OP还表示他不知道有多少行。我想你可以用试一试/接球来概括一下?
for (var i = 0; i < Math.Min(nLines, 3); i++)
    Console.WriteLine(threeLines[i]);
for (var i = Math.Min(nLines, 3); i > 0; i--)
    Console.WriteLine(threeLines[i-1]);