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

时间:2011-07-04 02:49:16

标签: ruby

我在Win 7机器上安装了Ruby 1.9.2。创建了一个简单的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

我不明白。在text.txt文件所在的目录中有一个analyzer.rb文件。我也试过提供文件的绝对路径C:\Ruby192\text.txt,但没有骰子。我错过了什么?

6 个答案:

答案 0 :(得分:72)

首先确定您的当前工作目录对于您的正在运行的脚本是什么 在开头添加此行:

puts Dir.pwd

这将告诉您当前工作目录ruby正在运行您的脚本。您很可能会发现它不在您认为的位置。然后确保为Windows正确指定路径名。请参阅此处的文档,了解如何正确格式化Windows的路径名:

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

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

编辑

添加第三个可能是最方便的解决方案,如果您将文本文件放在脚本文件中:

Dir.chdir(File.dirname(__FILE__))

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

答案 1 :(得分:13)

ENOENT表示它不存在。

只需将您的代码更新为:

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

答案 2 :(得分:4)

请使用chomp()chomp()使用STDIN

即。 test1.rb

print 'Enter File name: '

fname = STDIN.gets.chomp()  # or fname = gets.chomp()


fname_read = File.open(fname)

puts fname_read.read()

答案 3 :(得分:2)

尝试使用

Dir.glob(".") 

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

答案 4 :(得分:2)

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

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

答案 5 :(得分:1)

Ditto Casper的回答:

puts Dir.pwd

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

例如,如果您的工作目录是项目根目录,则可以直接在其下打开文件

json_file = File.read(myfile.json)