如何检查该文件是否已关闭?
例如:
set fh [open "some_test_file" "w"]
puts $fh "Something"
close $fh
现在我想查看$ fh关闭的频道 命令:
file channels $fh
什么都不返回,所以我无法在任何条件下使用它。
答案 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文件句柄,它就会变为无效,因此对它的所有访问都是无效的。因此,您使用其他方法来表示句柄不再与文件相关联。