2017-08-24 1 views
0

私はファイルハンドルを持っているとします。私が書いているファイルの名前を知る方法はありますか? つまり、あなたが通常使用します。ファイルハンドル値からファイル名を取得します

puts [ getFHFName $fh] 
>fname 

任意のアイデア:

set fh [ open "fname" "w" ] 

私は出力を持っているでしょうPROCをしたいですか?

答えて

3

Tclには、それを提供するための組み込みのメカニズムはありません。

最も簡単な回避策は、ファイルハンドルからファイル名にマップするグローバルアレイを維持することです。これを自分で行うか、マッピングを維持するためにopencloseを上書きすることができます。

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) 
} 
関連する問題