2011-12-21 34 views
169

是否有Ruby類/方法,我可以通過「完整路徑」home/me/a_file.txt,以確定它是否是有效的文件路徑?如何檢查文件存在

+1

你能澄清,如果你想知道「它是否是一個有效的文件路徑」或「它是否是存在的文件的路徑」? – 2011-12-21 12:58:08

+5

我的建議是花10分鐘閱讀FileUtils和File類中的所有方法。從長遠來看,它將爲您節省大量時間! – Alain 2011-12-21 12:54:02

回答

42

退房Pathname,特別是Pathname#exist?

File及其FileTest模塊可能更簡單/更直接,但我發現Pathname一般更好的接口。

+1

謝謝保羅,路徑名是我所需要的。不知何故,我無法找到「File」和「FileTest」接受「FULL」路徑參數。再次感謝 – iwan 2012-01-10 04:45:06

+0

路徑名非常有用,但它不是File和FileTest的完全替代品。擴展它很容易,所以它確實具有相同的測試,然後它作爲包裝的效用真的很閃亮。 – 2016-12-15 17:36:22

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」 – 2013-02-26 13:17:16

+1

需要注意的是,「和」不是代碼:'File.exist?(文件名)和File.file?(文件名)'總是會從File.exist返回false? 「如果指定的文件是目錄,則返回true,否則返回false。」 – 2014-03-13 22:06:07

+2

對不起,chris你錯了true = false ' >> File.file?('/ etc/passwd') => true >> File.file?('/ etc /') =>虛假 >> File.exists?('/ etc /') => true >> File.file('/ etc/passwd') => true >> File.file? passwd')和File.exists?('/ etc/passwd')' – shadowbq 2014-04-01 17:41:45

11

注意:file?只會對文件返回true。

要檢查文件是否存在:

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

你也可以用它來目錄:

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