我有一个脚本正在咀嚼很多对象,有时我想在运行中间杀死它,因为我看到有东西往南走。不幸的是,我正在使用 System.IO.StreamWriter 写入日志文件,每当我发送 Ctrl-C 时,我的日志文件都会卡在打开状态。
有什么方法可以定义某种处理程序或退出函数,让我可以优雅地关闭我打开的文件句柄和连接?
我有一个脚本正在咀嚼很多对象,有时我想在运行中间杀死它,因为我看到有东西往南走。不幸的是,我正在使用 System.IO.StreamWriter 写入日志文件,每当我发送 Ctrl-C 时,我的日志文件都会卡在打开状态。
有什么方法可以定义某种处理程序或退出函数,让我可以优雅地关闭我打开的文件句柄和连接?
可以尝试使用 Try/Catch/Finally,将 close() 命令放在 finally 块中。
使用 PowerShell 2.0 及更高版本,您可以定义Trap
在发生终止错误时触发的。您可以定义多个陷阱来捕获不同的异常。这可能会产生比try/catch
到处乱扔的代码更干净的代码,或者将整个脚本包装在一个大的try/catch
.
要终止脚本,请使用exit
。如果抛出异常,请使用try/catch/finally
中的 close() 命令finally
。如果它只是一个 if 测试,请尝试以下操作:
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
}
如果 streamwriter 的数量不时变化,您可以将它们收集到一个数组并关闭它们。前任:
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
}