使用.NET可以快速读取/写入大文件

时间:2016-04-06 01:48:35

标签: powershell

我正在尝试搜索大量文件并替换部分文本,但我一直遇到错误。

我试过这个,但有时候我会在powershell中出现“内存不足”错误

#region The Setup
$file = "C:\temp\168MBfile.txt"

$hash = @{
    ham = 'bacon'
    toast = 'pancakes'
}
#endregion The Setup

$obj = [System.IO.StreamReader]$file
$contents = $obj.ReadToEnd()
$obj.Close()

foreach ($key in $hash.Keys) {
    $contents = $contents -replace [regex]::Escape($key), $hash[$key]
}
try {
    $obj = [System.IO.StreamWriter]$file
    $obj.Write($contents)
} finally {
    if ($obj -ne $null) {
        $obj.Close()
    }
}

然后我尝试了这个(在ISE中),但它崩溃了一条弹出消息(抱歉,手头没有错误)并尝试重新启动ISE

$arraylist = New-Object System.Collections.ArrayList
$obj = [System.IO.StreamReader]$file
while (!$obj.EndOfStream) {
    $line = $obj.ReadLine()
    foreach ($key in $hash.Keys) {
        $line = $line -replace [regex]::Escape($key), $hash[$key]
    }
    [void]$arraylist.Add($line)
}
$obj.Close()
$arraylist

最后,我遇到了类似这样的事情,但我不确定如何正确使用它,我甚至不确定我是否正确地使用它。

$sourcestream = [System.IO.File]::Open($file)
$newstream = [System.IO.File]::Create($file)
$sourcestream.Stream.CopyTo($newstream)
$sourcestream.Close()

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以从1000的读数开始,并根据您获得的性能进行调整:

get-content textfile -Readcount 1000 | 
    foreach-object {do something} | 
    set-content textfile

(get-content textfile -Readcount 1000) -replace 'something','withsomething' | 
set-content textfile