如何关闭通过Tcl中可读的文件打开的文件

时间:2018-10-28 12:50:02

标签: tcl

当输入文件损坏时,输入文件由我的代码保持打开状态,而我无法将其删除。要删除它,我可能会关闭运行我的代码的命令行,以便文件自动关闭然后可以删除。

但是关闭通过file readable?打开的文件的命令是什么?

1 个答案:

答案 0 :(得分:0)

我不确定这是否是最好的方法,但我认为您可以使用以下方法:

proc close_all_files {} {
    foreach channel [file channels "file*"] {
        close $channel
    }
}

当您需要关闭以前打开的文件时,请调用close_all_files。

警告:绝对会关闭脚本中所有打开的文件。如果您不知道由file readable创建的文件标识符,则没有很多选择,除非您修改了proc以将文件标识符添加到proc之外的可访问列表中,这是最简单的使用全局列表的示例:

proc file'readable name {
    global filesIds
    set rc [catch {open $name} fp]
    if {[string match "file*" $fp]} {
        lappend filesIds $fp
    }
    if {$rc==0} {close $fp}
    expr {$rc==0}
}

然后,如果您知道使用file readable的文件顺序,则可以选择需要关闭的文件顺序。