2013-05-09 109 views
1

我试图确定一个StreamWriter对象是否在脚本中打开或已经关闭。如果它没有关闭,我可以写一个新的文件。如果它关闭,我需要执行其他操作....是否有确定System.IO.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. 
} 

回答

5

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

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 
    } 
+0

为什么呢? – 2013-05-09 16:18:06

+0

@slaks - 它喜欢它的工作原理,为什么你说不同 – ProfessionalAmateur 2013-05-09 16:21:05

+0

如果你直接关闭底层的流,这是行不通的。 (我没有注意到'stream'实际上是一个StreamWriter) – SLaks 2013-05-09 16:28:06

相关问题