Powershell - Streamwriter

Ore*_*yan 5 powershell streamwriter

我需要尽快写入许多文件,但我没有按照我使用的方式使用 Streamwriter 获得我想要的结果。例如,如果我写...

$File = "c:\somefile"
$Contents = get-content $File
$Contents | set-content $File
Run Code Online (Sandbox Code Playgroud)

所以读取文件的内容,什么都不做,然后写回来......文件是完全一样的。但是如果我写...

$File = "c:\somefile"
$Contents = get-content $File
$stream = [System.IO.StreamWriter] $File
$stream.WriteLine("$contents")
$stream.close()
Run Code Online (Sandbox Code Playgroud)

然后该文件看起来好像所有换行符都被忽略了,并且有点混乱。我需要做什么才能正确写入?非常感谢!

bri*_*ist 1

几点

Get-ContentSet-Content

Get-Content当您调用时,它会逐行读取文件(它不会给您换行符)。所以如果你这样做:

$Contents = Get-Content $File
Run Code Online (Sandbox Code Playgroud)

然后$Contents包含表示文件中的行的字符串数组

通过将其发送回Set-Content(它知道如何处理字符串数组或管道),它将写入lines

字符串中的数组

当您使用"$contents"数组项时,将用空格而不是换行符连接,因此当您使用时,$stream.WriteLine您正在编写一个字符串,末尾有一个换行符。

修复它

  1. 如果是 PowerShell 3+,请使用Get-Content $File -Raw一次读取整个文件,或者使用以下命令自行将其变成一个字符串。

    $content = (Get-Content $File) -join "`r`n" 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 不要这样做,而是使用这个:

    $stream.Write(($content -join "`r`n"))
    
    Run Code Online (Sandbox Code Playgroud)

请注意,我使用Write()and 不是WriteLine()因为您不需要在文件末尾插入额外的行(除非您这样做,但这可能会造成混乱,可能需要将其添加到内容中)。