From: Five point Five <5.5@...> Date: 2007-08-26T16:08:37+09:00 Subject: [ruby-list:43947] Re: Windows で正確なファイル名を取得するには Five point Five です。 中田伸悦さん,ご教示ありがとうございました。 > * Dir.globで探す > def realpathname(name) > Dir.glob("#{name}*").select {|n|File.fnmatch(name, n, File::FNM_SYSCASE)} > end > > * WindowsのGetLongPathName()を使う > require 'dl/win32' > GetLongPathName = Win32API.new(*%w"kernel32 GetLongPathName SSI I") > def realpathname(name) > if (len = GetLongPathName.call(name, nil, 0)).nonzero? > buf = "\0" * len > buf[0...GetLongPathName.call(name, buf, buf.size)] > end > end やってみたところ,どちらもうまく動きました。 今回は,スクリプトを Windows でしか動かないようにはしたくなかったのと, できるだけ簡潔に済ませたいので,Dir.glob による方法を使わせていただこ うと思います。 どうもありがとうございました。 実は「Dir.glob を使えばいいのでは?」というのは真っ先に思いついたので すが, (Ruby.txt というファイルがあったとして) Dir.glob("ruby.txt").first では "ruby.txt" しか得られないので,それ以上考えませんでした。ワイル ドカードにして一致するものを探せばよかったのですね。 File::FNM_SYSCASE という定数はリファレンスマニュアルには見つけられな かったのですが,もしかして Windows 専用なのでしょうか? -- Five point Five <5.5@moji.gr.jp>