如何检查文件是否存在

278

是否有 Ruby 类/方法可以接受“完整路径”home/me/a_file.txt并确定其是否是有效的文件路径?


5
我的建议是花10分钟阅读FileUtils和File类中的所有方法。这将在长期节省您很多时间! - Alain
3
请问您是想知道“这是否是一个有效的文件路径”还是“这是否是指向一个已存在文件的路径”?请澄清一下。 - Paul Annesley
2个回答

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

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

14
只需要 File.file? 就可以了,是吗? 文档解释:"如果指定的文件存在且为普通文件,则返回true" - Pavel K.
1
需要注意的是,上面的“and”不是代码:“File.exist?(filename)and File.file?(filename)”始终会返回false,因为File.exist?“如果指定的文件是目录,则返回true;否则返回false。” - Chris Hanson
3
抱歉,Chris,你错了, true and false => false>> File.file?('/etc/passwd') => true >> File.file?('/etc/') => false >> File.exists?('/etc/') => true >> File.exists?('/etc/passwd') => true >> File.file?('/etc/passwd') and File.exists?('/etc/passwd') - shadowbq
@MarkDavies - 在哪里?https://ruby-doc.org/core-2.6.1/File.html 这是当前版本,仍然有效。 - user3788685
8
@MarkDavies,我不是想垃圾邮件,但这个词已经被弃用了。 https://dev59.com/Mmox5IYBdhLWcg3wcT3r - webdreamer
显示剩余3条评论

68

1
谢谢Paul,Pathname正是我需要的。不知何故,我找不到“File”和“FileTest”接受“FULL”路径参数的方法。再次感谢。 - iwan
Pathname非常有用,但它并不能完全替代File和FileTest。不过很容易扩展它,让它具备相同的测试功能,这样它作为一个包装器的实用性就真正体现出来了。 - the Tin Man

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接