如何检查给定的目录是否存在于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
,否则返回false
。 1
File.exist?("directory")
Dir[]
返回一个数组,所以它永远不会是nil
。 如果你想按你的方式去做,你可以这样做
Dir["directory"].empty?
如果找不到,将返回true
。
你可以使用Kernel#test
:
test ?d, 'some directory'