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

Ege*_*soz 45 ruby

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

File.open("text.txt").each {|line| puts line}
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

Cas*_*per 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__))
Run Code Online (Sandbox Code Playgroud)

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

  • @enraged camel:你通常不应该把文本文件放在那里.你在那里乱用文件越多,你就越有可能删除你不应该删除的东西. (3认同)

Til*_*ill 13

ENOENT 意味着它不在那里.

只需将您的代码更新为:

File.open(File.dirname(__FILE__) + '/text.txt').each {|line| puts line}
Run Code Online (Sandbox Code Playgroud)


小智 6

请使用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()
Run Code Online (Sandbox Code Playgroud)