我正在尝试编写一个脚本,自动检出或更新一个 Subversion URL 的基础上是否存在一个指定的目录。
由于某种原因,我的代码无法正常工作,即使返回的是 false,它也总是返回 没错:
def directory_exists?(directory) return false if Dir[directory] == nil true end
我做错了什么?
File.exist?("directory")
Dir[]返回一个数组,所以它永远不会是 nil。如果你想按你的方式来,你可以的
Dir[]
nil
Dir["directory"].empty?
如果找到 不是,它将返回 true。
true
如果您要查找的文件是 目录而不仅仅是一个文件,那么可以使用 File.directory?或 Dir.exist?。只有当文件存在并且是一个目录时,才会返回 true。
File.directory?
Dir.exist?
顺便说一句,编写方法的一种更惯用的方法是利用 Ruby 自动返回方法内最后一个表达式的结果这一事实。因此,你可以这样写:
def directory_exists?(directory) File.directory?(directory) end
请注意,在本例中没有必要使用方法。
所有其他的答案都是正确的,但是,如果您试图检查用户主目录中的目录,则可能会出现问题。确保在检查之前展开相对路径:
File.exists? '~/exists' => false File.directory? '~/exists' => false File.exists? File.expand_path('~/exists') => true
你也可以这样使用 Dir::exist?:
Dir::exist?
Dir.exist?('Directory Name')
如果‘ Directory Name’是一个目录,返回 true,否则返回 false
false
你可以使用 Kernel#test:
Kernel#test
test ?d, 'some directory'
它的起源来自于一个 https://ss64.com/bash/test.html 您将注意到 bash test有这个标志 -d来测试目录是否存在 -d file True if file is a Directory. [[ -d demofile ]]
test
-d
-d file True if file is a Directory. [[ -d demofile ]]