当不是eof时,streamreader readline不返回任何内容

时间:2016-07-01 05:27:08

标签: asp.net vb.net text-files

我遇到与StreamReader ReadLine returns null when not EOF类似的问题,我无法弄清楚。代码并不复杂,所以我猜是否真的有必要:

Dim myFile As StreamReader

If Not myFile.EndOfStream Then
    'Ignore header
    myFile.ReadLine()       
    Dim line As Integer = 0
    Do Until myFile.EndOfStream
        line += 1
        Dim currentLine = myFile.ReadLine()
        'At the point line = 4 currentLine is Nothing - why??
        processLine(currentLine)
    Loop
End If

我可以向你保证,该文件包含更多的4行而且没有行为空。该文件是一个条形(' |')分隔的文本文件(* .txt),其中包含250列,文件的创建方式不会问我这个问题。所有我可以说我直到最近才遇到这个麻烦的文件,所以如何确定问题所在。我在NotePad ++中打开了文件,一切似乎都没问题。如果我站得正确,文件被破坏的后果是程序抛出异常,因为进程函数假定它不是空白,或者如果我选择忽略空行,那么它会使我的代码进入无限循环。

此外请注意我实际上是在尝试编辑遗留代码(经典的asp),所以当我完成后我需要将它转换回vbscript,它使用的TextStream对象类似于我拥有的代码所以我不想使其变得复杂,即没有花哨的.NET框架调用。我正在使用.NET来调试它。

1 个答案:

答案 0 :(得分:0)

StreamReader.Peek在EOF上返回-1,而不是0,因此,当达到EOF时,获得Nothing而不是退出循环是合理的。

如果你有一个文件名,使用System.IO.File.ReadLines可能更容易做到这一点,这也将解决Peek问题:

For Each line In File.ReadLines(filePath).Skip(1)
    processLine(line)
Next