使用StreamWriter对象后,为什么我的文本文件不完整?

时间:2013-09-11 21:46:14

标签: 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

问题1:
文件的末尾缺失。根据线长度,最后一行约为495,通常在线的中间切割。

问题2:
程序完成后,文本文件仍然被锁定(我们可以读取它,但不能删除/重命名)。我们必须退出PowerShell才能获得对该文件的完全访问权限。

在Windows 2003和Windows 2008上测试,结果完全相同。

修改
dugas发现了问题:我忘记了一些括号。这解决了我的代码片段显示的问题 但我的原始程序有括号。所以我将这个问题标记为已解决,并且当我为这个特定问题找到更好的代码片段时,我会打开一个新问题。

编辑2
得到它了。我有一个隐藏的例外。非常感谢!

1 个答案:

答案 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()
 }
}