6

我写了一个生成大文本文件的小程序。我发现使用 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 上测试,结果完全相同。

编辑
杜加斯发现了问题:我忘记了一些括号。这解决了我的代码片段显示的问题。
但我原来的程序有括号。因此,我将这个问题标记为已解决,并在我为这个特定问题找到更好的片段时打开一个新问题。

编辑 2
明白了。我有一个隐藏的例外。非常感谢 !

4

1 回答 1

9

调用 StreamWriter 的方法时缺少括号:

改变:

$stream.close

$stream.Close()

您可能还想将 StreamWriter 包装在 try/finally 中,并在 finally 中调用 Dispose:

try
{
 $stream = [System.IO.StreamWriter] "C:\Users\168357\Documents\test2.txt"
 $stream.WriteLine("xxxxxx")
}
finally
{
 if ($stream -ne $NULL)
 {
  $stream.Dispose()
 }
}
于 2013-09-11T22:05:30.083 回答