我需要尽可能快地写入多个文件,但是我使用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()然后,该文件看起来好像所有的换行符都被忽略了,有点混乱。我需要做什么才能让它正确地写入?非常感谢!
发布于 2015-02-26 06:04:43
几点
Get-Content和Set-Content
当您调用Get-Content时,它逐行读取文件(它不会给您换行)。所以如果你这样做:
$Contents = Get-Content $File则$Contents包含一个字符串数组,这些字符串数组表示文件中的行。
通过将其发送回Set-Content (它知道如何处理字符串数组或管道),它将写入代码行。
字符串中的数组
当您使用"$contents"时,数组项将使用空格连接,而不是换行符,因此当您使用$stream.WriteLine时,您编写的是一个在末尾有一个换行符的单个字符串。
修复它
Get-Content $File -Raw一次读取整个文件,或者使用以下命令将其转换为一个字符串。$content = (Get-Content $File) -join "rn“
"rn")) (($content -join $stream.Write
注意,我使用的是Write(),而不是WriteLine(),因为您不需要在文件的末尾插入额外的行(除非您这样做,但这可能会让人感到困惑,您可能希望将其添加到内容中)。
发布于 2015-02-26 06:00:23
Get-Content将在换行处拆分文件,有效地删除换行符。使用-Raw开关可将文件作为单个字符串读取,同时保持换行符不变:
$Contents = get-content $File -Rawhttps://stackoverflow.com/questions/28730347
复制相似问题