From: Masayoshi Takahashi Date: 2007-08-25T14:08:26+09:00 Subject: [ruby-list:43942] Re: Windows で正確なファイル名を取得するには 高橋征義です。 Five point Five さんは書きました: > Windows で,ユーザーがファイル名を入力し,そのファイルについての > 情報をゴニョゴニョしたいとします。 > > Windows はファイル名の大文字/小文字を区別しないので,Ruby.txt と > いうファイルを指定するのに,ユーザーは "ruby.txt" と入力するかも > しれません。 > もちろん open('ruby.txt') は成功します。 > > しかし,大文字/小文字の区別も含めて正確なファイル名が知りたいと > きはどうすればよいのでしょうか? Windows上であれば、Win32OLE経由でFileSystemObjectを使えばよいのではないでしょうか。 > puts Pathname.new('ruby.txt').realpath > > とやってみると, > > C:/Documents and Settings/nemo/My Documents/ruby.txt > > のように,ディレクトリ名だけは大文字/小文字が正しいのですが, > "ruby.txt" は引数に渡したままとなっています。 http://www.morijp.com/masarl/homepage3.nifty.com/masarl/article/ruby-win32ole/file-system-object.html のFileSystemObjectモジュールを使うと、 require 'win32ole' module FileSystemObject @instance = nil def FileSystemObject.instance unless @instance then @instance = WIN32OLE.new('Scripting.FileSystemObject') end return @instance end end fileSystem = FileSystemObject.instance puts fileSystem.getAbsolutePathName('ruby.txt') みたいに書けます。 require 'pathname' puts Pathname.new('ruby.txt').realpath の場合と比べると、 C:\tmp>ruby test.rb C:\tmp\Ruby.txt C:/tmp/ruby.txt といった違いがあります。参考まで。 高橋征義 (takahashi@twinspark.co.jp) 上記URLの「RubyによるWin32OLEプログラミング」のページはWindowsでRubyを 使われるのであれば読まれて損はないかと思います。