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)