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
评论