You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ruby中读取脚本目录外的文件?附目录结构及报错说明

解决Ruby读取上级目录文件时的" No such file or directory "错误

首先先明确你的目录结构:

├── script
│   ├── search.rb
│   └── searchable.txt
└── unsearchable.txt

这个问题我之前也踩过坑,核心原因是Ruby脚本的当前工作目录和目标文件的实际位置不匹配:当你在script目录下运行search.rb时,Ruby默认会把script当作当前工作目录,这时你直接写File.read("unsearchable.txt"),它会去script文件夹里找这个文件——但目标文件明明在script的上级目录,自然会报找不到的错误。

下面给你几种靠谱的解决方法:

方法1:用脚本路径定位(最推荐,不受运行位置影响)

这种方法不管你在哪个目录下运行脚本,都能精准找到目标文件,是最稳妥的写法。

在search.rb里这样写:

# 获取当前脚本所在的目录路径
script_directory = File.dirname(__FILE__)
# 拼接上级目录的unsearchable.txt路径
target_file_path = File.join(script_directory, "../unsearchable.txt")
# 读取文件内容
file_content = File.read(target_file_path)

或者更简洁的一行写法:

file_content = File.read(File.expand_path("../unsearchable.txt", __FILE__))

这里的__FILE__是Ruby的内置常量,代表当前脚本的完整路径;File.expand_path会把相对路径转换成绝对路径,彻底避免路径混乱的问题。

方法2:先切换工作目录

如果你需要读取多个上级目录的文件,可以先把工作目录切换到脚本所在的script文件夹,之后直接用相对路径访问上级文件:

# 切换工作目录到当前脚本所在的目录
Dir.chdir(File.dirname(__FILE__))
# 现在直接用../就能指向上级目录的文件
file_content = File.read("../unsearchable.txt")

方法3:从根目录运行脚本(不推荐,灵活性差)

如果你不想修改脚本,也可以在终端里从项目的根目录运行search.rb:

ruby script/search.rb

这时当前工作目录是根目录,你在脚本里直接写File.read("unsearchable.txt")就能读到文件,但这种方法限制了你必须在特定目录下运行脚本,不够灵活,所以一般不推荐。


内容的提问来源于stack exchange,提问作者ader

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:55:09