0
假設我有一個文件句柄。有沒有辦法讓我知道它正在寫入的文件的名稱? 即,您通常使用:從文件句柄值中獲取文件名
set fh [ open "fname" "w" ]
我想一個進程,將有輸出:
puts [ getFHFName $fh]
>fname
任何想法?
假設我有一個文件句柄。有沒有辦法讓我知道它正在寫入的文件的名稱? 即,您通常使用:從文件句柄值中獲取文件名
set fh [ open "fname" "w" ]
我想一個進程,將有輸出:
puts [ getFHFName $fh]
>fname
任何想法?
Tcl沒有提供任何內置機制來提供該功能。 (如果我們確實這麼做的話,那麼你可以用fconfigure
找到它,但事實並非如此)。
最簡單的解決方法是保留一個從文件句柄映射到文件名的全局數組。您可以自己保留此信息,也可以覆蓋open
和close
以維護該映射。
rename open _open
rename close _close
array set fhmap {}
proc open {filename args} {
global fhmap
set fd [_open $filename {*}$args]
# Note! Do not normalise pipelines!
if {![string match |* $filename]} {
set filename [file normalize $filename]
}
set fhmap($fd) $filename
return $fd
}
# Probably ought to track [chan close] too.
proc close {filehandle args} {
global fhmap
# Note that we use -nocomplain because of sockets.
unset -nocomplain fhmap($filehandle)
tailcall _close $filehandle {*}$args
}
proc getFHFName {filehandle} {
global fhmap
return $fhmap($filehandle)
}