ruby - 使用 Ruby 读取目录中其他地方的文件

标签 ruby path

我有一个项目结构如下:

  • info.config(只是一个带有 prefs+creds 的 JSON 文件)
  • main.rb
  • 任务/
    • 测试.rb

在 main.rb(在项目的根目录)和 test.rb(在 tasks 文件夹下)中,我希望能够读取和解析 info.config 文件。我已经想出如何在 main.rb 中执行以下操作:

JSON.parse(File.read('info.config'))

当然,这在 test.rb 中不起作用。

问题:如何从 test.rb 中读取文件,即使它在层次结构中更深一层?

感谢我能得到的任何指导!谢谢!

最佳答案

使用相对路径:

path = File.join(
    File.dirname(File.dirname(File.absolute_path(__FILE__))),
    'info.config'
)
JSON.parse(File.read(path))
  • File.dirname(File.absolute_path(__FILE__)) 将为您提供 test.rb 所在的目录。 -> (1)
  • File.dirname(File.dirname(File.absolute_path(__FILE__))) 将为您提供 (1) 的父目录。

引用:File::absolute_path , File::dirname

更新

使用 File::expand_path更具可读性。

path = File.expand_path('../../info.config', __FILE__)
JSON.parse(File.read(path))

关于ruby - 使用 Ruby 读取目录中其他地方的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21902526/

相关文章:

c++ - 最短路径加权矩阵

java - 无法从 jar 加载属性

ruby-on-rails - 修复 ruby​​ 中的重复方法

ruby-on-rails - 从 windows-1251 到 UTF-8 Ruby on Rails

ruby - 比较 Procs 的内容,而不是结果

go - golang编译器/设置路径问题

c# - 如果 FileSystemWatcher 与应用程序位于同一驱动器上,则 FileSystemWatcher 无法使用设置为驱动器根目录的路径

java - Ruby 对象到 Java 对象

ruby - 如何手动指定要在自动测试中运行的测试文件?

c++ - 为什么我的 C++ 程序找不到必要的 .dll 文件?