Tcl 如何将文件句柄映射到它正在访问的文件

Tcl 如何将文件句柄映射到它正在访问的文件,tcl,Tcl,我正在尝试映射文件句柄,如file6 (上一次将fh[open somefile.txt w]设置为它正在访问的文件的结果) 因此,我想要一个file6-->somefile.txt之间的映射 我尝试了文件频道,但这只列出了频道名称,而不是实际的文件名。正如您所注意到的,Tcl不会为您保留这些信息,但您可以通过执行以下操作轻松地自己跟踪这些信息: set fh [open somefile.txt w] set filenames($fh) somefile.txt 然后,当您想知道关联的文件

我正在尝试映射文件句柄,如
file6
(上一次
将fh[open somefile.txt w]
设置为它正在访问的文件的结果)

因此,我想要一个file6-->somefile.txt之间的映射


我尝试了
文件频道
,但这只列出了频道名称,而不是实际的文件名。

正如您所注意到的,Tcl不会为您保留这些信息,但您可以通过执行以下操作轻松地自己跟踪这些信息:

set fh [open somefile.txt w]
set filenames($fh) somefile.txt
然后,当您想知道关联的文件名时,您可以

puts $filenames($fh)
您可以通过以下方式实现自动化:

proc myOpen {name args} {
    global filenames
    set fh [open $name {*}$args]
    set filenames($fh) $name
    return $fh
}
当然,这是一个快速而肮脏的半解决方案,它会让一些重要的事情保持开放状态,例如,如果通道关闭,则需要类似地删除关联。创建更全面的解决方案是可能的,但有点复杂

文件: , , , , , ,

您可以使用推式转换在关闭时自动删除映射,但这有点混乱。@DonalFellows是否考虑过提供
chan configure-filename
只读选项?“除了做和付小费之外,还有什么别的障碍吗?”卡尔文先生,我只是觉得以前从来没有人抽时间来做这件事;我认为这是一个合理的添加(至少如果询问信息的口译员是
open
的调用者,或者不安全)。