0
私はファイルハンドルを持っているとします。私が書いているファイルの名前を知る方法はありますか? つまり、あなたが通常使用します。ファイルハンドル値からファイル名を取得します
puts [ getFHFName $fh]
>fname
任意のアイデア:
set fh [ open "fname" "w" ]
私は出力を持っているでしょうPROCをしたいですか?
私はファイルハンドルを持っているとします。私が書いているファイルの名前を知る方法はありますか? つまり、あなたが通常使用します。ファイルハンドル値からファイル名を取得します
puts [ getFHFName $fh]
>fname
任意のアイデア:
set fh [ open "fname" "w" ]
私は出力を持っているでしょうPROCをしたいですか?
Tclには、それを提供するための組み込みのメカニズムはありません。
最も簡単な回避策は、ファイルハンドルからファイル名にマップするグローバルアレイを維持することです。これを自分で行うか、マッピングを維持するために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)
}