我写了一个生成大文本文件的小程序。我发现使用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
问题1:
文件的末尾缺失。根据线长度,最后一行约为495,通常在线的中间切割。
问题2:
程序完成后,文本文件仍然被锁定(我们可以读取它,但不能删除/重命名)。我们必须退出PowerShell才能获得对该文件的完全访问权限。
在Windows 2003和Windows 2008上测试,结果完全相同。
修改
dugas发现了问题:我忘记了一些括号。这解决了我的代码片段显示的问题
但我的原始程序有括号。所以我将这个问题标记为已解决,并且当我为这个特定问题找到更好的代码片段时,我会打开一个新问题。
编辑2
得到它了。我有一个隐藏的例外。非常感谢!
答案 0 :(得分:9)
调用StreamWriter的方法时缺少括号:
变化:
$stream.close
到
$stream.Close()
您可能还想在run / 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()
}
}