当输入文件损坏时,输入文件由我的代码保持打开状态,而我无法将其删除。要删除它,我可能会关闭运行我的代码的命令行,以便文件自动关闭然后可以删除。
但是关闭通过file readable?打开的文件的命令是什么?
答案 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
的文件顺序,则可以选择需要关闭的文件顺序。