Powershell - Streamwriter
Powershell - Streamwriter
我需要尽快写入许多文件,但我没有按照我使用的方式使用 Streamwriter 获得我想要的结果。例如,如果我写...
$File = "c:\somefile"
$Contents = get-content $File
$Contents | set-content $File
于是读取文件内容,什么也不做,写回来...文件完全一样。但是如果我写...
$File = "c:\somefile"
$Contents = get-content $File
$stream = [System.IO.StreamWriter] $File
$stream.WriteLine("$contents")
$stream.close()
然后文件看起来好像所有的换行符都被忽略了,有点乱。我需要做什么才能正确写入?非常感谢!
Get-Content
将在换行处拆分文件,有效地删除换行符。使用 -Raw
开关将文件作为单个字符串读取,保持换行不变:
$Contents = get-content $File -Raw
几点
Get-Content
和 Set-Content
Get-Content
当你调用它时它会逐行读取文件(它不会给你换行符)。所以如果你这样做:
$Contents = Get-Content $File
然后 $Contents
包含一个 数组 字符串,代表文件中的行。
通过将其发送回 Set-Content
(它知道如何处理字符串数组或管道),它将写入 行。
字符串数组
当您使用 "$contents"
时,数组项将用空格而不是换行符连接,因此当您使用 $stream.WriteLine
时,您正在编写一个字符串,最后有一个换行符。
修复它
如果是PowerShell 3+,使用Get-Content $File -Raw
一次读取整个文件,或者使用下面的方法自己将其变成一个字符串。
$content = (Get-Content $File) -join "`r`n"
不要那样做,而是使用这个:
$stream.Write(($content -join "`r`n"))
请注意,我使用的是 Write()
而不是 WriteLine()
,因为您不需要在文件末尾插入额外的一行(除非您这样做,但这可能会造成混淆,可能想将其添加到内容中)。
我需要尽快写入许多文件,但我没有按照我使用的方式使用 Streamwriter 获得我想要的结果。例如,如果我写...
$File = "c:\somefile"
$Contents = get-content $File
$Contents | set-content $File
于是读取文件内容,什么也不做,写回来...文件完全一样。但是如果我写...
$File = "c:\somefile"
$Contents = get-content $File
$stream = [System.IO.StreamWriter] $File
$stream.WriteLine("$contents")
$stream.close()
然后文件看起来好像所有的换行符都被忽略了,有点乱。我需要做什么才能正确写入?非常感谢!
Get-Content
将在换行处拆分文件,有效地删除换行符。使用 -Raw
开关将文件作为单个字符串读取,保持换行不变:
$Contents = get-content $File -Raw
几点
Get-Content
和 Set-Content
Get-Content
当你调用它时它会逐行读取文件(它不会给你换行符)。所以如果你这样做:
$Contents = Get-Content $File
然后 $Contents
包含一个 数组 字符串,代表文件中的行。
通过将其发送回 Set-Content
(它知道如何处理字符串数组或管道),它将写入 行。
字符串数组
当您使用 "$contents"
时,数组项将用空格而不是换行符连接,因此当您使用 $stream.WriteLine
时,您正在编写一个字符串,最后有一个换行符。
修复它
如果是PowerShell 3+,使用
Get-Content $File -Raw
一次读取整个文件,或者使用下面的方法自己将其变成一个字符串。$content = (Get-Content $File) -join "`r`n"
不要那样做,而是使用这个:
$stream.Write(($content -join "`r`n"))
请注意,我使用的是 Write()
而不是 WriteLine()
,因为您不需要在文件末尾插入额外的一行(除非您这样做,但这可能会造成混淆,可能想将其添加到内容中)。