2011-12-21 21 views
169

Rubyのクラス/メソッドでは、 "フルパス"、つまりhome/me/a_file.txtを渡して、それが有効なファイルパスであるかどうかを確認できますか?ファイルの存在を確認する方法

+1

あなたは明確にすることはできますか"それが存在するファイルへのパスであるかどうか"? –

+5

私のアドバイスは、FileUtilsとFileクラスのすべてのメソッドを読むのに10分を費やすことです。それは長期的にあなたに多くの時間を節約します! – Alain

答えて

42

チェックアウトPathname特にPathname#exist?インチ

FileとそのFileTestモジュールは、おそらくより単純でより直接的なものですが、一般的には、より良いインターフェースであるPathnameが見つかりました。

+1

Paulに感謝、Pathnameが私に必要なものです。どういうわけか "File"と "FileTest"が "FULL"パス引数を受け入れるのを見つけることができません。ありがとうございます。 – iwan

+0

Pathnameは非常に便利ですが、FileとFileTestの完全な置き換えではありません。同じテストをするように拡張するのは簡単ですし、ラッパーとしてのそのユーティリティが本当に輝きます。 –

445
# file? will only return true for files 
File.file?(filename) 

# Will also return true for directories - watch out! 
File.exist?(filename) 
+10

File.file?十分でなければなりませんか? Docs: "指定されたファイルが存在し、通常のファイルであればtrueを返す" –

+1

"and"はコードではないことに注意してください: 'File.exist?(filename)and File.file?(filename)'は常にFile.existからfalseを返しますか? "指定されたファイルがディレクトリの場合はtrue、それ以外の場合はfalseを返します。" –

+2

申し訳ありませんが、クリスあなたが間違っている真と偽=> falseを ' >> File.file?( '/ etc/passwdファイル') =>真 >> File.file?( 'は/ etc /') => false >> File.exists?( '/ etc /') => true >> File.exists?( '/ etc/passwd') => true >> File.file?( '/ etc/passwd ')とFile.exists?('/etc/passwd ')' – shadowbq

11

注:file?は、ファイルに対してのみtrueを返します。

ファイルが存在するかどうかを確認するには、次の

File.exist?('file_name.csv') 
O/P: true 

ます。また、ディレクトリのためにそれを使用することができます:あなたは「それが有効なファイルパスであるかどうか」を知りたい場合は

File.exist?('~/dir_name') 
O/P: true 
関連する問題