2011-12-21 15 views
169

Geçerli bir dosya yolu olup olmadığını belirlemek için "tam yol", home/me/a_file.txt iletebileceğim bir Ruby sınıfı/yöntemi var mı?Dosya varlığı nasıl denetlenir

+1

Eğer açıklık getirebilir siz "geçerli bir dosya yolu olup olmadığını" veya bilmek istiyorsanız bir dosya varsa

kontrol etmek için "var olan bir dosyanın yolu olsun"? –

+5

Tavsiyem, FileUtils ve File sınıflarındaki tüm yöntemleri 10 dakika harcayarak geçirmektir. Uzun vadede size çok zaman kazandıracak! – Alain

cevap

42

kontrol dışarı Pathname ve özellikle Pathname#exist? de.

File ve onun FileTest modülü belki daha basit/daha doğrudan, ancak Pathname genel olarak daha güzel bir arabirim buluyorum.

+1

teşekkürler Paul, Yol adı ihtiyacım olan şey. Bir şekilde "File" ve "FileTest" dosyalarını "FULL" yol argümanı kabul etmiyor. Tekrar teşekkürler – iwan

+0

Yol adı çok kullanışlıdır, ancak File ve FileTest için tam bir değiştirme değildir. Uzatmak kolaydır, aynı testlere sahip olsa da, bir paketleyici olarak faydası gerçekten parlar. –

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

ve

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

sadece File.file? yeterli olmalı, hayır mı? Docs: "Adlandırılmış dosya varsa ve normal bir dosya ise true döndürür" –

+1

Yukarıdaki "ve" kodunun aşağıdaki gibi olduğunu unutmamak önemlidir: 'File.exist? (Dosya adı) ve File.file? (Dosya adı)' her zaman File.exist'ten beri yanlış mı dönüyorsunuz? "Belirtilen dosya bir dizin ise true döndürür, aksi halde yanlış." –

+2

Maalesef Chris yanlış doğru ve yanlış => false ' >> File.file? ('/ Etc/passwd') => true >> File.file? ('/ Etc /') => yanlış >> File.exists? ('/ etc /') => true >> File.exists? ('/ etc/passwd') => true >> File.file? ('/ etc/passwd ') ve File.exists? ('/etc/passwd ') ' – shadowbq

11

NOT: file? yalnızca dosyalar için true değerini döndürür.

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

Ayrıca dizinler için kullanabilirsiniz:

File.exist?('~/dir_name') 
O/P: true 
İlgili konular