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

时间:2012-05-01 20:49:53

标签: ruby file-io directory cgi

我对Ruby比较陌生,我试图以这样的方式打开文件:

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

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

,它就可以工作
#! /usr/bin/env ruby
file = File.open(ARGV[0], 'r')

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

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

1 个答案:

答案 0 :(得分:13)

路径没有扩展,但是当你通过命令行运行它时它会发生。我相信在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')