Gre*_*SAT 6 powershell streamwriter
我写了一个小程序,生成大文本文件.我发现使用StreamWriter比我知道的其他方法快得多.但是每个文本文件的末尾都缺失了.
我将程序缩减为一个非常简单的片段来发现问题,但我仍然无法理解如何解决它.
#$stream = [System.IO.StreamWriter] "test.txt"
# also tested with $stream = New-Object System.IO.StreamWriter("test.txt")
$i = 1
while($i -le 500) {
$stream.WriteLine("$i xxxxxx")
$i++
}
$stream.flush # flushing don't change anything
$stream.close # also tested with $stream.dispose
exit 0
Run Code Online (Sandbox Code Playgroud)
问题1:
文件末尾丢失.根据线长度,最后一行约为495,通常在线的中间切割.
问题2:
程序完成后,文本文件仍然被锁定(我们可以读取它,但不能删除/重命名).我们必须退出PowerShell才能获得对该文件的完全访问权限.
在Windows 2003和Windows 2008上测试,结果完全相同.
编辑
dugas发现了问题:我忘记了一些括号.哪个解决了我的代码片段显示的问题.
但我的原始程序有括号.所以我将这个问题标记为已解决,并且当我为这个特定问题找到更好的代码片段时,我会打开一个新问题.
编辑2
知道了.我有一个隐藏的例外.非常感谢 !
调用StreamWriter的方法时,您缺少括号:
更改:
$stream.close
Run Code Online (Sandbox Code Playgroud)
至
$stream.Close()
Run Code Online (Sandbox Code Playgroud)
您可能还想在try/finally中包装StreamWriter并在finally中调用Dispose:
try
{
$stream = [System.IO.StreamWriter] "C:\Users\168357\Documents\test2.txt"
$stream.WriteLine("xxxxxx")
}
finally
{
if ($stream -ne $NULL)
{
$stream.Dispose()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7497 次 |
| 最近记录: |