首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell - Streamwriter

Powershell - Streamwriter
EN

Stack Overflow用户
提问于 2015-02-26 05:51:05
回答 2查看 17K关注 0票数 4

我需要尽可能快地写入多个文件,但是我使用Streamwriter的方式并没有得到我想要的结果。例如,如果我写...

代码语言:javascript
复制
$File = "c:\somefile"
$Contents = get-content $File
$Contents | set-content $File

所以读取文件的内容,什么也不做,然后写回...文件是完全相同的。但是如果我写..。

代码语言:javascript
复制
$File = "c:\somefile"
$Contents = get-content $File
$stream = [System.IO.StreamWriter] $File
$stream.WriteLine("$contents")
$stream.close()

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-26 06:04:43

几点

Get-ContentSet-Content

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

代码语言:javascript
复制
$Contents = Get-Content $File

$Contents包含一个字符串数组,这些字符串数组表示文件中的行。

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

字符串中的数组

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

修复它

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

$content = (Get-Content $File) -join "rn“

  • 不要这样做,而是使用下面的代码:

"rn")) (($content -join $stream.Write

注意,我使用的是Write(),而不是WriteLine(),因为您不需要在文件的末尾插入额外的行(除非您这样做,但这可能会让人感到困惑,您可能希望将其添加到内容中)。

票数 1
EN

Stack Overflow用户

发布于 2015-02-26 06:00:23

Get-Content将在换行处拆分文件,有效地删除换行符。使用-Raw开关可将文件作为单个字符串读取,同时保持换行符不变:

代码语言:javascript
复制
$Contents = get-content $File -Raw
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28730347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档