使用File.open在Ruby中打开目录中的文件

6

我是一个相对新手的 Ruby 开发者,我正在尝试以如下方式打开一个文件:

#! /usr/bin/env ruby
data_file = '~/path/to/file.txt'
file = File.open(data_file, 'r')

然而,当我执行时,会出现"No such file or directory"的错误提示(该文件确实存在于该目录中)。如果我将文件路径作为命令行参数输入,则可以正常运行:
#! /usr/bin/env ruby
file = File.open(ARGV[0], 'r')

然后在命令行中运行,例如:ruby script.cgi ~/path/to/file.txt。

有任何想法如何使第一种方法工作?

1个回答

14

路径没有被扩展,但是当你通过命令行运行它时,它会被扩展。我认为在Unix系统中,在调用之前会先扩展路径,也就是说:

ruby file.rb ~/path/to/file

实际上被扩展为

ruby file.rb /home/user/path/to/file
你可以通过在终端中运行以下命令(或创建一个带有p ARGV [0]的Ruby文件并运行它)来验证这一点:
echo "p ARGV[0]" | ruby "" ~/path/to/file #/home/user/path/to/file
你可以使用 File.expand_path~ 转换为 /home/user
data_file = '~/path/to/file.txt'
file = File.open(File.expand_path(data_file), 'r')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接