2013-05-09 5 views
1

Im пытается определить, открыт ли или нет в сценарии объект 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

Вы можете проверить, если 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  : 

EDIT Или вы можете проверить один из них:

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

И почему это? –

+0

@slaks -Похоже, что это работает, почему вы говорите разные – ProfessionalAmateur

+0

Если вы закрываете базовый поток напрямую, это не сработает. (Я не заметил, что 'stream' является фактическим StreamWriter) – SLaks

Смежные вопросы