我在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
,但没有骰子。我错过了什么?
答案 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)