我必须读取包含数百万条记录的文本文件。在阅读文件时,我必须实现类似“Tracker”的功能,它会将最后一次读取的LineNumber写入日志文件。我不希望这个日志文件打开并且写入操作会影响我的应用程序性能。任何人都可以建议我如何实现它? P.S.我正在使用yield来读取这个大文件,并且我有这样的多个文件。我想停止阅读操作,如果文件有一些无效的记录...虽然这个阅读操作正在进行,但我想以某种方式让最终用户知道,到目前为止它已经阅读了如此之多的行文件阅读正在进行中。写入文件读取操作
using (StreamReader reader = new StreamReader(_fileNameAndPath))
{
while (reader.EndOfStream == false)
{
string data = reader.ReadLine();
_fileLineNumber = _fileLineNumber + 1;
//this line number should go to tracker file Logger.Trace(_fileLineNumber)
//............
}
}
Logger类:
public static class Logger
{
.....
public static void Trace(string message)
{
FileStream fileStream = new FileStream(logFilePath, FileMode.Append);
StreamWriter streamWriter = new StreamWriter(fileStream);
streamWriter.WriteLine(message);
}
}
只要保持流为整个应用程序或读取上下文打开。 AKA没有静态记录器 - 注入它 –
这真的是你的'Logger.Trace()'实现吗?因为您没有关闭文件流... –
您需要记录程序结束时读取的最后一行的编号,还是需要记录您阅读的每一行? – falx