我遇到与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来调试它。
答案 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