4

我有一个脚本正在咀嚼很多对象,有时我想在运行中间杀死它,因为我看到有东西往南走。不幸的是,我正在使用 System.IO.StreamWriter 写入日志文件,每当我发送 Ctrl-C 时,我的日志文件都会卡在打开状态。

有什么方法可以定义某种处理程序或退出函数,让我可以优雅地关闭我打开的文件句柄和连接?

4

3 回答 3

4

可以尝试使用 Try/Catch/Finally,将 close() 命令放在 finally 块中。

于 2013-02-18T15:37:05.187 回答
2

使用 PowerShell 2.0 及更高版本,您可以定义Trap在发生终止错误时触发的。您可以定义多个陷阱来捕获不同的异常。这可能会产生比try/catch到处乱扔的代码更干净的代码,或者将整个脚本包装在一个大的try/catch.

于 2013-02-18T17:01:26.770 回答
1

要终止脚本,请使用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
}
于 2013-02-18T15:39:58.673 回答