Ruby的File.open给出“没有这样的文件或目录 – text.txt(Errno :: ENOENT)”错误

我在Win 7上安装了Ruby 1.9.2。 创build了一个简单的analyzer.rb文件。 它有这一行:

 File.open("text.txt").each {|line| puts line} 

当我运行代码时,它给了我这个错误:

 analyzer.rb:1:in `initialize': No such file or directory - text.txt (Errno::ENOENT) from analyzer.rb:1:in `open' from analyzer.rb:1:in `<main>' Exit code: 1 

我不明白。 在analyzer.rb文件的同一目录下有一个text.txt文件。 我也尝试喂养文件的绝对path, C:\Ruby192\text.txt ,但没有骰子。 我错过了什么?

首先确定你的当前工作目录是否是你的运行脚本。
在开头添加这一行:

puts Dir.pwd

这将告诉你在哪个当前的工作目录ruby正在运行你的脚本。 你很可能会看到这不是你认为的地方。 然后确保你正确地指定了窗口的path名。 在这里看到文档如何正确格式化窗口的path名称:

http://www.ruby-doc.org/core/classes/IO.html

然后使用Dir.chdir将工作目录更改为text.txt所在的位置,或者根据上述IO文档中的说明指定文件的绝对path名。 那应该这样做…

编辑

如果要将文本文件放入脚本文件中,请添加可能是最方便的第三种解决scheme:

 Dir.chdir(File.dirname(__FILE__)) 

这将自动将当前工作目录更改为与运行脚本的.rb文件相同的目录。

ENOENT意味着它不在那里。

只需更新您的代码:

 File.open(File.dirname(__FILE__) + '/text.txt').each {|line| puts line} 

请用STDIN使用chomp()chomp()

即test1.rb

 print 'Enter File name: ' fname = STDIN.gets.chomp() # or fname = gets.chomp() fname_read = File.open(fname) puts fname_read.read() 

尝试使用

 Dir.glob(".") 

查看目录中的内容(以及它正在查看的目录)。

在错误的目录旁边,我只是绊倒了另一个变体:

我有一个File.open(my_file).each {|line| puts line} File.open(my_file).each {|line| puts line}爆炸,但在我工作的目录中(ls在命令行中显示的名称)有这样的名字。 我检查了一个File.exists?(my_file) ,奇怪地返回false 。 说明: my_file是目标不存在的符号链接! 由于File.exists? 将遵循一个符号链接,它会说false尽pipe链接仍然存在。

同上卡斯帕的回答:

 puts Dir.pwd 

只要知道当前的工作目录,就指定相对于该目录的文件path。

例如,如果你的工作目录是项目根目录,你可以像这样直接打开一个文件

 json_file = File.read(myfile.json)