如何使用流读取器c#逐行正确读取文件

本文关键字:读取 文件 逐行 何使用 | 更新日期: 2023-09-27 18:21:43

如何逐行读取文件中的文本?

我使用的这个代码在第一轮中读取第一行和第二行。以下内容不起作用,因为它在方法sr.ReadLine()中返回了两个不同的字符串。ReadLine()方法是否从文件中提取下一行而不是当前行?

List<string> allInformation = new List<string>();
DateTime minimumDateTime = times[this.Step].AddMinutes(-different);
DateTime maximumDateTime = times[this.Step].AddMinutes(different);
using (FileStream fs = System.IO.File.Open(this.File, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(bs))
{
    DateTime thisTime;
    string[] info = new string[6];
    while (sr.Peek() >= 0)
    {
        info = sr.ReadLine().Split(new string[] { ", ", ",", "'"" }, StringSplitOptions.RemoveEmptyEntries);
        thisTime = DateTime.ParseExact(info[FileConstants.DATE], "yyyy-M-d H:m:s", null);
        if (thisTime > minimumDateTime && thisTime < maximumDateTime)
        {
            allInformation.Add(sr.ReadLine());
        }
    }
}

如何使用流读取器c#逐行正确读取文件

您在循环中使用了两次ReadLine。将StreamReader.ReadLine的返回值存储在字符串变量中。否则,您将使读者进入下一行。

while (sr.Peek() >= 0)
{
    string line = sr.ReadLine();
    info = line.Split(new string[] { ", ", ",", "'"" }, StringSplitOptions.RemoveEmptyEntries);
    thisTime = DateTime.ParseExact(info[FileConstants.DATE], "yyyy-M-d H:m:s", null);
    if (thisTime > minimumDateTime && thisTime < maximumDateTime)
    {
        allInformation.Add(line);
    }
}

我知道你已经有了答案,但我只是想指出,你可以像这样使用Linq更简洁地编写整个方法:

var minimumDateTime = times[this.Step].AddMinutes(-different);
var maximumDateTime = times[this.Step].AddMinutes(different);
var linesInDateRange = 
    from   line in System.IO.File.ReadLines(this.File)
    let    info = line.Split(new[] {", ", ",", "'""}, StringSplitOptions.RemoveEmptyEntries)
    let    thisTime = DateTime.ParseExact(info[FileConstants.DATE], "yyyy-M-d H:m:s", null)
    where  thisTime > minimumDateTime && thisTime < maximumDateTime
    select line;
var allInformation = linesInDateRange.ToList();