📜  c# 读取文件的最后 10 行 - C# (1)

📅  最后修改于: 2023-12-03 14:59:43.654000             🧑  作者: Mango

C# 读取文件的最后 10 行

在开发过程中,我们经常需要读取文件的内容,并对其进行处理。有时候,我们需要只读取文件的最后几行,比如查看日志文件的最新记录,或者读取一个大型 CSV 文件的尾部内容。在 C# 中,可以使用以下几种方法来读取文件的最后 10 行。

方法一:使用 Linq

在 C# 中,可以使用 Linq 来读取文件的最后 10 行。

using System.IO;
using System.Linq;

public static string[] ReadLastLines(string path, int lineCount)
{
    return File.ReadLines(path)
               .Reverse()
               .Take(lineCount)
               .Reverse()
               .ToArray();
}

这个方法将文件的每一行读入一个字符串数组中,然后使用 Reverse 函数反转字符串数组的顺序,接着使用 Take 函数选择数组的最后 10 行,最后再次使用 Reverse 函数进行反转,得到正确的顺序。

方法二:使用数组

另一种读取文件最后 10 行的方法是使用数组进行缓存。这种方法可以避免读取整个文件,提高程序的性能。

using System.IO;

const int lineCount = 10;
var lines = new string[lineCount];

using var fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
using var streamReader = new StreamReader(fileStream);

int i;
for (i = 0; i < lineCount && streamReader.Peek() >= 0; i++)
{
    lines[i % lineCount] = streamReader.ReadLine();
}

if (streamReader.Peek() >= 0)
{
    while (streamReader.ReadLine() != null)
    {
        lines[i++ % lineCount] = streamReader.ReadLine();
    }
}

return lines.Skip(i % lineCount).Concat(lines.Take(i % lineCount)).ToArray();

这个方法先定义了一个字符串数组,用于缓存最后 10 行的内容。然后使用 FileStream 和 StreamReader 类来读取文件的内容。接着,在一个循环中读取文件的前 10 行,并将其存储在缓存数组中。最后,读取文件的剩余部分,并存储在缓存数组中,直到数组已满为止。

总结

以上是两种读取文件最后 10 行的方法。第一种使用 Linq 函数,适用于小文件(文件大小不超过几千行),而第二种方法使用数组进行缓存,适用于大文件。根据具体的应用场景选择适合自己的方法是非常重要的。