【问题标题】:How to check if a given directory exists in Ruby如何检查给定目录是否存在于Ruby中
【发布时间】:2010-11-08 06:50:20
【问题描述】:

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

由于某种原因,我的代码无法正常工作,并且总是返回 true,即使它是 false:

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

我做错了什么?

【问题讨论】:

    标签: ruby directory


    【解决方案1】:

    你可以使用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 ]]

    【讨论】:

    • 这很整洁。不是最直接的表现力,但简洁。
    【解决方案2】:

    如果您要查找的文件是否是目录 而不仅仅是文件,则可以使用@987654321@@987654322@。仅当文件存在并且是目录时才会返回 true。

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

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

    请注意,在当前情况下不需要使用方法。

    【讨论】:

    • 为什么还要把它放在另一个方法中呢?直接调用就行了!
    • @Radar 我认为简化的方法可能出于问题的目的进行了简化,并且实际方法可能包含一些额外的逻辑。如果方法中不需要其他逻辑,我同意。无论如何,只是运行目录?直接。
    • Dir.exists? 不会比File.directory? 干净吗?
    • Dir.exists? 已弃用,请使用 Dir.exist
    • @burningpony 我的错,是Dir.exist?
    【解决方案3】:

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

    Dir.exist?('Directory Name')
    

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

    【讨论】:

      【解决方案4】:
      File.exist?("directory")
      

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

      Dir["directory"].empty?
      

      如果找不到,它将返回true

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 2012-03-19
          • 1970-01-01
          • 2014-02-10
          • 2019-08-28
          • 2016-02-01
          • 2019-02-24
          • 2010-11-04
          • 2010-11-23
          相关资源
          最近更新 更多