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
,您可以选择需要关闭的文件顺序。
推荐阅读
- ringcentral - RingCentral Meetings API - 用户需要有 [Meetings] 权限
- javascript - 以下场景的编码标准需要明确或建议
- reactjs - React Redux - 如何在 url 更改时使用 React 和 Redux 进行正确的加载屏幕
- ios - PickerView 快速删除占位符标签
- google-apps-script - 是否可以在 AppsScript 中获取新的 Google 幻灯片演示数据?
- python - Pyinstaller:不能包含 .mp3 文件
- apache-superset - 如何在apache超集中添加大于过滤器(过滤器框)的动态?
- cefsharp - URL的初始加载缓慢
- ios - 如何判断 iCloud 文件是否已下载?
- drools - 加载持久会话时所有事件的 Drools 触发规则