读取到文件的末尾,然后向后搜索,直到找到十个换行符,然后再考虑各种编码后再向前读取。确保处理文件中的行数少于十的情况。下面是一个实现(在C#中,您已对此进行了标记),该实现被通用化为找到
numberOfTokens文件中的最后一个,该文件位于标记分隔符表示为的
path编码
encoding位置
tokenSeparator。结果以a形式返回
string(可以通过返回
IEnumerable<string>枚举令牌的a
来改善)。
public static string ReadEndTokens(string path, Int64 numberOfTokens, Encoding encoding, string tokenSeparator) { int sizeOfChar = encoding.GetByteCount("n"); byte[] buffer = encoding.GetBytes(tokenSeparator); using (FileStream fs = new FileStream(path, FileMode.Open)) { Int64 tokenCount = 0; Int64 endPosition = fs.Length / sizeOfChar; for (Int64 position = sizeOfChar; position < endPosition; position += sizeOfChar) { fs.Seek(-position, SeekOrigin.End); fs.Read(buffer, 0, buffer.Length); if (encoding.GetString(buffer) == tokenSeparator) { tokenCount++; if (tokenCount == numberOfTokens) { byte[] returnBuffer = new byte[fs.Length - fs.Position]; fs.Read(returnBuffer, 0, returnBuffer.Length); return encoding.GetString(returnBuffer); } } } // handle case where number of tokens in file is less than numberOfTokens fs.Seek(0, SeekOrigin.Begin); buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); return encoding.GetString(buffer); }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)