Powershell - 在 Readline 上使用 Peek 方法是否有好处(虽然不是 null)?



我一直在使用Streamreader(和StreamWriter(的PowerShell脚本上,将大文件解析为较小的报告。在搜索将这个东西放在一起的最佳方式时,我发现有两种方法主要用于将内容读取到文件末尾。

1 -while ($reader.Peek() -ge 0) { $line = $reader.Readline() ... }

2 -while (($line = $read.ReadLine()) -ne $null) { do stuff ... }

从文档中看,Peek 似乎将读取下一个值,但不会更改读取器的位置。看起来 ReadLine 基本上也会做同样的事情,但会读取整个字符串/行。我觉得这是一个"no-duh"问题 - 在阅读行之前实际查看值真的更有效,还是只是将读者分配给变量之前的额外步骤?

提前谢谢你!

既然你无论如何都需要台词,我认为没有理由Peek().如果你真的想检查你是否在最后,那么无论如何.EndOfStream属性可能会更准确。

如此处所述,.Peek()也可以在发生错误时返回-1,而不仅仅是在到达流的末尾时返回。那里的大多数答案还建议避免使用它,只使用.ReadLine().

mklement0 还提到使用System.IO.File.ReadLines.这将返回一个枚举,因此您可以使用路径调用它并像其他枚举一样使用它,而无需一次加载所有行(因此它仍然适用于大文件(。

您可以将其与foreachForEach-Object一起使用,例如:

foreach ($line in ([System.IO.File]::ReadLines('pathtofile'))) {
$line
}

[System.IO.File]::ReadLines('pathtofile') | ForEach-Object -Process {
$_
}
$reader = [System.IO.File]::ReadLines('pathtofile')
foreach ($line in $reader) { $line }
$reader | ForEach-Object -Process { $_ }

相关内容

  • 没有找到相关文章

最新更新