1

我试图确定一个StreamWriter对象在脚本中是打开的还是已经关闭的。如果它没有关闭,我可以在文件中写一个新行。如果它已关闭,我需要执行其他操作....

如何验证流是否仍处于打开状态?

示例测试脚本。

$stream = [System.IO.StreamWriter] "C:\testing.txt"
$stream.WriteLine("TEST")
$stream.close()
if($stream)){
    #stream still open, write new line
    $stream.WriteLine("Stream is still open.  Write.")
    $stream.close()
}else(
    #stream not open... end script, send reponse.
}
4

1 回答 1

5

您可以检查 -object 是否BaseStream存在Streamwriter。像这样:

if($stream.BaseStream)){
    #Stream is open
}

例子:

$sw = New-Object System.IO.StreamWriter "C:\test.txt"

PS > $sw | fl *


AutoFlush      : False
BaseStream     : System.IO.FileStream
Encoding       : System.Text.UTF8Encoding
FormatProvider : nb-NO
NewLine        : 

PS > if($sw.BaseStream) { "yes" }
yes

PS > $sw.Close()

PS > if($sw.BaseStream) { "yes" }

PS > $sw


AutoFlush      : False
BaseStream     : 
Encoding       : 
FormatProvider : nb-NO
NewLine        : 

编辑或者您可以检查其中一项:

if($sw.BaseStream.CanWrite) {
    #You have permission to write = stream open and writeable
    }

#or

if($sw.BaseStream.SafeFileHandle) {
    #you have a filehandle = stream open
    }
于 2013-05-09T16:10:17.453 回答