wiki:csharp:read-file-lastline

C# 快速提取文本文件最后一行数据

提取文本最后一行数据的方法

/// <summary>
/// 提取文本最后一行数据
/// </summary>
/// <param name="fs">文件流</param>
/// <returns>最后一行数据</returns>
private string GetLastLine(FileStream fs)
{
    int seekLength = (int)(fs.Length < 1024 ? fs.Length : 1024);  // 这里需要根据自己的数据长度进行调整,也可写成动态获取,可自己实现
    byte[] buffer = new byte[seekLength];
    fs.Seek(-buffer.Length, SeekOrigin.End);
    fs.Read(buffer, 0, buffer.Length);
    string multLine = System.Text.Encoding.UTF8.GetString(buffer);
    string[] lines = multLine.Split(new string[] { "\\n" }, StringSplitOptions.RemoveEmptyEntries);
    string line = lines[lines.Length - 1];
 
    return line;
}

使用方法

using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (StreamReader sr = new StreamReader(fs))
{
    // 读取首行
    string line = sr.ReadLine();
    SDataAircraft data = JsonWrapper.DeserializeObject<SDataAircraft>(line);
 
    if (data == null)
    {
        sr.Close();
        fs.Close();
        continue;
    }
 
    info.StartTime = Convert.ToDateTime(data.timeStamp);
 
    // 读取末行                    
    line = GetLastLine(fs);
 
    //...
 
    sr.Close();
    fs.Close();
}

另外,在同时读写同一个文件时,需要设置文件流的FileShare.ReadWrite:

写文件:

using (FileStream fs = new FileStream(fileName, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
using (StreamWriter sw = new StreamWriter(fs))
{
    sw.WriteLine(data);
    sw.Close();
    fs.Close();
}

读文件:

using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (StreamReader sr = new StreamReader(fs))
{
    // 读取首行
    string line = sr.ReadLine();
    //...
 
    sr.Close();
    fs.Close();
}

参考:

评论

请输入您的评论. 可以使用维基语法:
 
wiki/csharp/read-file-lastline.txt · 最后更改: 2023/01/03 15:25 由 127.0.0.1