本题与Remove Top Line of Text File with Powershell的区别是我的文件很大(超过 300M)。
我现在使用的技术是基于one of the answers对于那个问题,但是对于大文件来说它似乎效率低下。有没有更快(但不太漂亮)的方法来做到这一点?
请您参考如下方法:
尝试使用 streamreader 和 streamwriter。这应该会很快执行。
$reader = [IO.File]::OpenText("C:\Users\Andy\Documents\input.txt")
$writer = New-Object System.IO.StreamWriter("C:\Users\Andy\Documents\output.txt")
$reader.ReadLine() > $null # Skip first line.
while ($reader.Peek() -ge 0) {
$writer.writeline($reader.ReadLine())
}
$reader.Close()
$writer.Close()
我通过创建一个 300MB 的文本文件并在上面使用它来进行测试。 output.txt 在 3.5 秒内创建 :-)。
更新 我稍微优化了它,因此它不会在循环的每次迭代中都对表达式求值。现在它在 2.9 秒内完成 :-)
如果你不介意内存膨胀,你也可以这样做。这仍然更快,但占用更多内存,但少于 Get-Content。
$reader = [IO.File]::OpenText("C:\Users\Andy\Documents\input.txt")
$writer = New-Object System.IO.StreamWriter("C:\Users\Andy\Documents\output.txt")
$reader.ReadLine() > $null # Skip first line.
$writer.write($reader.ReadToEnd())
$reader.Close()
$writer.Close()


