首页 > 解决方案 > 如何关闭通过 Tcl 中可读文件打开的文件

问题描述

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

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

标签: tcl

解决方案


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

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,您可以选择需要关闭的文件顺序。


推荐阅读