2017-03-23 111 views
0

我想通過網絡轉儲一個大字符串到一個文本文件,但我只是每秒64kbit左右。 閱讀一些關於寫文件的不同方法,並看到使用Streamwriter的例子非常快,但是這是寫入本地文件。Powershell改變.net streamwriter緩衝區大小

遇到此線程的建議是增加緩衝區大小。有誰知道如何在Powershell中做到這一點?

包括鏈接以供參考:

Writing to file using StreamWriter much slower than file copy over slow network

謝謝!

編輯

$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False 
[System.IO.File]::WriteAllLines($PathToFile, $LargeTextMass, $Utf8NoBomEncoding, 0x10000) 

Cannot find an overload for "WriteAllLines" and the argument count: "4". 

編輯2:

$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False 
$sw = new-object System.IO.StreamWriter "test2.txt", $false, $Utf8NoBomEncoding,0x10000 
+0

很像它在你鏈接的例子中解釋的方式。您正在使用必要的構造函數參數創建您的Streamwriter,在此例中爲流,編碼和緩衝區大小:https://msdn.microsoft.com/en-US/library/72d9f8d5(v=vs.110)。 aspx。或字符串,布爾,編碼和緩衝區大小:https://msdn.microsoft.com/en-us/library/0wf7ab94(v=vs.110).aspx –

+0

第一次嘗試沒有工作得很好。也許我需要先創建它。 – PatrikJ

+0

是的,您需要首先創建帶有參數的對象,例如:$ sw = new-object System.IO.StreamWriter $ path System.Text.Encoding.UTF8 $ false 10000.您可以使用以下命令創建.Net對象構造函數參數與新對象。 –

回答

1

一個StreamWriter的緩衝區施工期間設置,所以你需要使用一個構造函數,它允許你創建對象時提供的緩衝區大小。 StreamWriter有兩個構造函數,允許您設置緩衝區大小。

StreamWriter Constructor (Stream, Encoding, Int32)

StreamWriter Constructor (String, Boolean, Encoding, Int32)

要建立在PowerShell中.NET對象與構造函數的參數,你可以使用new-object cmdlet的多個參數:

[System.String] $fileName = 'C:\test\test.txt' 
[System.Boolean] $append = $false 
[System.Int32] $bufferSize = 10000 
[System.Text.Encoding] $encoding = [System.Text.Encoding]::UTF8 
$writer = new-object System.IO.StreamWriter -ArgumentList $fileName,$append,$encoding,$bufferSize 

有時你可能會得到一個錯誤,說明PowerShell找不到與您提供的參數匹配的構造函數。 Powershell有時使用不同於.Net的數據類型,而不是自己明確定義參數類型。因此,使用構造函數期望的類型顯式聲明所有參數是有意義的。

+0

非常感謝,並多謝了解釋! – PatrikJ