如何检查该文件是否已关闭

时间:2012-10-29 12:09:13

标签: tcl

如何检查该文件是否已关闭?

例如:

set fh [open "some_test_file" "w"]
puts $fh "Something"
close $fh

现在我想查看$ fh关闭的频道 命令:

file  channels $fh

什么都不返回,所以我无法在任何条件下使用它。

3 个答案:

答案 0 :(得分:2)

如果close命令没有返回错误,则表示成功。 file channels命令不会引用参数但只返回所有打开的通道,因此$channel in [file channels]将是一个冗余测试,以确保您关闭了通道。但是,如何相信关闭命令的非错误响应?

我必须纠正自己 - 进行一些检查,结果文件通道命令可以采用可返回的通道名称的可选模式(glob表达式)。因此,如果文件仍处于打开状态,原始示例将起作用。您可以使用file channels std*在tclsh解释器中对此进行测试。但是,如果关闭命令无法关闭通道,则close命令仍会返回错误,这也可能使您可能处理此类错误(可能稍后会重试)。

答案 1 :(得分:2)

您还可以使用以下内容:

proc is_open {chan} {expr {[catch {tell $chan}] == 0}}

答案 2 :(得分:0)

为什么不将通道名称放入变量,使结束代码取消设置该变量,如果[close]成功,并且在检查代码中只检查变量是否不存在(即,未设置)?

请注意,我正在遵循系统编程中更常见的做法:一旦关闭了OS文件句柄,它就会变为无效,因此对它的所有访问都是无效的。因此,您使用其他方法来表示句柄不再与文件相关联。