如何编写跨操作系统的统一Ruby文件路径?解决路径兼容问题
跨系统通用Ruby文件路径解决方案
不需要为Linux和Mac分别创建代码仓库,Ruby自带的文件路径处理工具就能完美解决跨系统路径问题,同时还能避免你遇到的Errno::ENOTDIR错误。
问题根源
你当前的代码差异并非Linux和Mac的系统路径规则差异(Ruby会自动适配不同系统的路径分隔符),而是相对路径的层级计算错误,导致在不同系统下解析出的目标文件路径指向了不存在的目录。
通用实现代码
以下是跨Linux/Mac的通用写法,同时补全了目录创建的健壮性处理(避免因coin目录不存在而报错):
# 获取当前脚本文件所在的绝对目录 script_dir = File.dirname(__FILE__) # 拼接目标文件路径:根据你的实际目录结构调整 # 如果coin文件夹和脚本文件同级,用这行 coin_file = File.join(script_dir, "coin", "coin.json") # 如果coin文件夹在脚本目录的上级目录,替换为这行 # coin_file = File.join(File.dirname(script_dir), "coin", "coin.json") # 确保coin目录存在(不存在则创建) coin_dir = File.dirname(coin_file) Dir.mkdir(coin_dir) unless Dir.exist?(coin_dir) # 创建空的JSON文件(如果文件不存在) unless File.exist?(coin_file) File.open(coin_file, "w+") { |f| f.write("{}") } end
关键知识点
File.dirname(__FILE__):返回当前脚本文件所在的绝对目录,不受运行系统影响,是获取脚本位置的可靠方式。File.join:自动根据当前操作系统使用正确的路径分隔符(Linux/Mac用/,Windows用\),彻底避免手动写路径导致的兼容性问题。- 先创建目录:之前的代码如果
coin目录不存在,直接调用File.open会触发目录不存在的错误,提前创建目录能让程序更健壮。
内容的提问来源于stack exchange,提问作者seamus
相关产品推荐
相关产品推荐

