使用File.open从ruby目录中打开文件

5 ruby directory file-io cgi

我是Ruby的新手,我试图以这样的方式打开文件:

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

但是我得到"没有这样的文件或目录"(该文件确实存在于该目录中).如果我将该路径作为命令行参数放在文件中,例如:

#! /usr/bin/env ruby
file = File.open(ARGV[0], 'r')
Run Code Online (Sandbox Code Playgroud)

然后从命令行运行,如:ruby script.cgi~/path/to/file.txt

任何想法如何让它以第一种方式工作?

Gaz*_*ler 13

路径没有扩展,但是当您通过命令行运行它时它会发生.我相信在unix系统中,路径在运行调用之前被扩展,这意味着:

ruby file.rb ~/path/to/file
Run Code Online (Sandbox Code Playgroud)

实际上扩展到了

ruby file.rb /home/user/path/to/file
Run Code Online (Sandbox Code Playgroud)

您可以通过在终端中运行以下命令来验证这一点(或者使用p ARGV[0]并运行它来创建ruby文件):

echo "p ARGV[0]" | ruby "" ~/path/to/file #/home/user/path/to/file
Run Code Online (Sandbox Code Playgroud)

您可以使用File.expand_path更改~/home/user

data_file = '~/path/to/file.txt'
file = File.open(File.expand_path(data_file), 'r')
Run Code Online (Sandbox Code Playgroud)