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)