【问题标题】:How do I use File.join with File::ALT_SEPARATOR?如何将 File.join 与 File::ALT_SEPARATOR 一起使用?
【发布时间】:2015-05-04 15:28:20
【问题描述】:

我想使用File.join() 在 Ruby 中构建路径:

File.Join("Dir1", "Dir2", "Dir3")

结果是:

Dir1/Dir2/Dir3

我希望 File.join() 使用 File::ALT_SEPARATOR 来执行此操作:

Dir1\Dir2\Dir3

我该怎么做?

【问题讨论】:

  • 为什么要它使用反斜杠? Ruby 和 Rake 都不需要它们。 “如果可能,Ruby 将在不同的操作系统约定之间转换路径名。例如,在 Windows 系统上,文件名“/gumby/ruby/test.rb”将打开为“\gumby\ruby\test.rb”。当指定Ruby 字符串中的 Windows 样式文件名,记得转义反斜杠:"c:\\gumby\\ruby\\test.rb""
  • 我还建议查看 Ruby 的内置 Pathname

标签: ruby rake-task albacore


【解决方案1】:

你可以使用

File.join('Dir1','Dir2').gsub(File::SEPARATOR,
     File::ALT_SEPARATOR || File::SEPARATOR)

【讨论】:

  • 我猜这暗示 File::ALT_SEPARATOR 在某些平台上可以为 nil ......我想知道哪个?
  • 由于一些非常奇怪的原因,我不得不开始在我的 Win10 机器上使用它来对抗路径作为命令行中的 args。不知道我更新了什么破坏了它......
  • @AnthonyMastrean on Linux(至少 CentOS)
【解决方案2】:

您可以将此功能添加到File

def File.join_alt(*fnames)
  sep = File::ALT_SEPARATOR || File::SEPARATOR
  fnames.map(&:to_s) # Anything with to_s
    .join(sep)       # Work on all platforms
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2014-06-11
    相关资源
    最近更新 更多