我有一个咀嚼很多物品的剧本,有时候我想在跑步过程中杀掉它,因为我看到了南方的东西。不幸的是,我正在使用System.IO.StreamWriter写入日志文件,每当我发送Ctrl-C时,我的日志文件都会被打开。
有没有什么方法可以定义某种处理程序或退出函数,让我能够优雅地关闭我打开的文件句柄和连接?
答案 0 :(得分:4)
可以尝试使用Try / Catch / Finally,将close()命令放在Finally块中。
答案 1 :(得分:2)
使用PowerShell 2.0及更高版本,您可以定义Trap
,当发生终止错误时将触发该{{3}}。您可以定义多个陷阱以捕获不同的异常。这可能会导致代码比在任何地方散布的try/catch
更清晰,或者将整个脚本包装在一个大的try/catch
中。
答案 2 :(得分:1)
要终止脚本,请使用exit
。如果抛出异常,请在try/catch/finally
中使用finally
和close()命令。如果它只是一个if-test,请尝试这样的事情:
function Close-Script {
#If stream1 is created
if($stream1) {
$stream1.Close()
}
#Terminate script
exit
}
$stream1 = New-Object System.IO.StreamWriter filename.txt
If(a test that detects your error) {
Close-Script
}
如果streamwriters的数量不时变化,您可以将它们收集到一个数组并关闭它们。例如:
function Close-Script {
#Close streams
$writers | % { $_.Close() }
#Terminate script
exit
}
$writers = @()
$stream1 = New-Object System.IO.StreamWriter filename.txt
$writers += $stream1
$stream2 = New-Object System.IO.StreamWriter filename2.txt
$writers += $stream2
If(a test that detects your error) {
Close-Script
}