• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ruby の File.exist? メソッドで大文字小文字を区別して)

rubyのFile.exist?メソッドで大文字小文字を区別してファイルの存在検査を行なう方法

このQ&Aのポイント
  • rubyのFile.exist?メソッドを使用してファイルの存在検査を行ないたいが、大文字小文字を区別できない問題がある。
  • 例えば、/etcというディレクトリが存在する場合、'/ETC'で検査しても存在すると判定されてしまう。
  • しかし、大文字小文字を区別してファイルの存在検査を行なう方法はない。

質問者が選んだベストアンサー

  • ベストアンサー
  • wisize
  • ベストアンサー率42% (37/87)
回答No.1

そもそもMacOSはファイル名の大文字小文字を区別しませんので、 etc,Etc,eTc,etC,ETc,EtC,eTC,ETC はすべて等価です。 なので判定したいしたくない以前の問題なんじゃないでしょうか? どうしてもというのでしたら、 真の場合にファイル名を文字列として判別する課程も追加すればいいと思いますが、 環境によっては意図通りの働きをしてくれないかもしれません。 P.S. MacOSの設定で大文字小文字を区別するようにもできますが、 影響範囲が大きいのでどこでどんなエラーが発生するか分からない上、 余所の環境では結局何も変わりないのでお勧めしません。

mokokomi
質問者

補足

ご回答ありがとうございます。 >> そもそもMacOSはファイル名の大文字小文字を区別しませんので、 あーそうでした。すいません。 >> 真の場合にファイル名を文字列として判別する課程も追加すればいいと思いますが、 対象ディレクトリ内のファイル名一覧を取得して、 対象ファイル名が case sensitive でマッチするかを検査するといった流れでしょうか? アドバイスを元に以下のように検査してみました。 対象ディレクトリ一覧   $ ruby -e 'Dir.glob("/*"){|f|p f}'   ... 略   "/Developer"   "/etc"   "/home"   ... 略 ### 検査実行 "/etc" があるか?   $ ruby -e 'Dir.glob("/*"){ |f| if f =~ /\/etc/ then puts f << ":マッチ" else puts f end}'   ...   /Developer   /etc:マッチ   /home   ... "/ETC" があるか?   $ ruby -e 'Dir.glob("/*"){ |f| if f =~ /\/ETC/ then puts f << ":マッチ" else puts f end}'   ...   /Developer   /etc   /home   ... >> MacOSの設定で大文字小文字を区別するようにもできますが、 >> 影響範囲が大きいのでどこでどんなエラーが発生するか分からない上、 そのようですね。 助言ありがとうございます。

その他の回答 (1)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

MacのOSについては、よくわかりませんが、#1の方の回答では、ファイル名の大文字と小文字は区別されないそうです。windowsでも、同様にファイル名の大文字と小文字は区別されません。私が、windowsで、質問者様と同じような状況になった場合、大文字をと小文字を区別せずに、ファイルの存在のチェックをおこなうと思います。直接的な回答ではありませんが、どうして、大文字と小文字を区別されたいのか、その理由を提示されると、又、べつの回答が得られるかと思います。基本的には#1のかたが言われるとおり、大文字をと小文字を区別しない方法をとるのがよいかと思います。

mokokomi
質問者

補足

ご回答ありがとうざいます。 >> どうして、大文字と小文字を区別されたいのか、その理由を提示されると ちょっと ruby スクリプトのポータビリティについて調査してました。 素朴な疑問としてご理解いただけると幸いです。 >> 基本的には#1のかたが言われるとおり、大文字をと小文字を区別しない方法をとるのがよいかと思います。 そうですね。 ちなみに centos ext3 で同じように検査すると 大文字小文字を区別するようです。   $ruby -e 'p File.exist?("/etc")'   true   $ruby -e 'p File.exist?("/ETC")'   false これはファイルシステムに依存する挙動として理解しました。 助言ありがとうございます。

関連するQ&A