【问题标题】:Accessing files in the same directory as script访问与脚本在同一目录中的文件
【发布时间】:2010-12-29 14:30:36
【问题描述】:

我需要访问与我的 Ruby 脚本位置相关的文件。

我找到的唯一解决方案是使用File.dirname(__FILE__),但是,如果脚本是从符号链接运行的,__FILE__ 会给出符号链接的位置。

我更喜欢不涉及查看__FILE__、检查它是否是链接、如果是,找出它指向的位置的解决方案。但是,如果没有其他办法,很高兴知道是否已经有宝石可以做到这一点?

【问题讨论】:

    标签: ruby relative-path cwd


    【解决方案1】:

    File.expand_path 有帮助吗?

    (没有'nix box可以试一试)

    【讨论】:

    • 不适用于我的,也不适用于 OS X。也许需要设置一个选项才能做到这一点?我正在使用File.dirname(File.expand_path(__FILE__))
    • 我只是使用 File.expand_path(".") 作为符号链接的目录。我在 max osx 10.6 上运行 ruby​​ 1.9
    • 我使用的是 ruby​​ 1.8,但安装了 1.9 仍然无法正常工作。我只是写一个函数来测试它是否是一个符号链接,如果是,就跟随。
    • @Jeffrey Aylesworth:尝试反转这些操作:File.expand_path(File.dirname(__FILE__))
    【解决方案2】:

    我更喜欢以下变体:File.expand_path('../other_file_in_same_dir', __FILE__)

    第二个参数是相对路径将被扩展的点。这默认为当前工作目录。

    【讨论】:

      【解决方案3】:

      您始终可以使用 popen 执行诸如 ls -l $(pwd) 之类的 shell 命令,并对其进行解析以遵循符号链接。对于 windows,您只需执行等效的 windows os 命令(我假设它存在!)

      【讨论】:

      • 如何在 Windows 上获得“符号链接”?
      • 你不能,但我需要脚本在 Windows 和 *nix 上正常工作。 (Windows 确实有一种专有的文件格式,它在 Windows 上的作用类似于符号链接,它们是 .lnk 文件)
      • .lnk 只是一个文件,而不是文件系统功能,其用途有所不同。您可以在 Windows 中获取符号链接和硬链接。当我移动文件夹并且旧应用程序需要旧路径时,我有时会使用它们。您可以在这里找到更多信息:howtogeek.com/howto/windows-vista/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多