2013-05-09 113 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

相關問題