如何检查给定的目录是否存在于Ruby中

我试图编写一个脚本,根据指定的目录是否存在自动检出或更新Subversion URL。

出于某种原因,我的代码不工作,并且即使它是false也总是返回true

def directory_exists?(directory) return false if Dir[directory] == nil true end 

我究竟做错了什么?

如果你正在寻找的文件是一个目录而不仅仅是一个文件,你可以使用File.directory?Dir.exist? 。 只有当文件存在并且是一个目录时,这将返回true。

顺便说一句,编写方法的更习惯的方法是利用Ruby自动返回方法内最后一个expression式的结果。 因此,你可以这样写:

 def directory_exists?(directory) File.directory?(directory) end 

请注意,在目前情况下使用一种方法是不必要的。

所有其他答案都是正确的,但是,如果您尝试检查用户主目录中的目录,则可能会遇到问题。 确保在检查之前展开相对path:

 File.exists? '~/exists' => false File.directory? '~/exists' => false File.exists? File.expand_path('~/exists') => true 

你也可以使用Dir::exist? 像这样:

 Dir.exist?('Directory Name') 

如果“目录名称”是一个目录,则返回true ,否则返回false1

 File.exist?("directory") 

Dir[]返回一个数组,所以它永远不会是nil 。 如果你想按你的方式去做,你可以这样做

 Dir["directory"].empty? 

如果找不到,将返回true

你可以使用Kernel#test

 test ?d, 'some directory'