【问题标题】:Simple way to detect if a string is a file or directory检测字符串是文件还是目录的简单方法
【发布时间】:2011-07-16 08:08:00
【问题描述】:

我正在尝试编写一个小型 ruby​​ 脚本,该脚本根据是否包含尾随 / 的字符串来检测给定参数是文件还是目录。

需要明确的是,我有兴趣知道文件或目录是否实际存在,换句话说,AFAIK File.directory? 对我不起作用。 p>

还有我在标准库中找到的所有方法,例如Pathname.basename 自动删除尾随/(如果有的话)。所以做这样的事情:

arg = "/foo/bar/baz/"
if File.basename(arg).include?("/")
    puts "#{arg} is a directory"
end

不会工作。

有没有一种简洁的方法来做到这一点?我错过了什么吗?

如果可能的话,我宁愿不使用正则表达式。

【问题讨论】:

    标签: ruby file path directory


    【解决方案1】:

    它是否仅取决于最后一个字符?如果是,arg[-1] 就足够了

    if arg[-1] == ?/
        puts "#{arg} is a directory"
    end
    

    【讨论】:

      【解决方案2】:

      由于/foo/bar/baz 可以引用或者/foo/bar 目录中名为baz 的文件或名为/foo/bar/baz 的目录,因此无法确定它是目录还是一个文件而没有实际命中文件系统。

      文件名的规则不区分文件和目录——事实上,在许多 *nix 风格中,目录一个只有特殊属性的文件。如果您想为您的应用程序建立一个规则,指出目录将始终以尾随分隔符结尾,那么您可以使用:

      is_directory = arg =~ %r{#{File.PATH_SEPARATOR}\Z}
      

      is_directory = arg[=1] == File.PATH_SEPARATOR
      

      【讨论】:

        【解决方案3】:

        你的意思是这样的?

        puts "#{arg} is a directory" if arg =~ %r|/\z|
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-06-01
          • 1970-01-01
          • 2012-08-28
          • 2012-07-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多