我在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文件位于同一目录中.我还try 输入文件的绝对路径C:\Ruby192\text.txt,但没有骰子.我错过了什么?

推荐答案

首先要弄清楚你的current working directory分是多少

puts Dir.pwd

这将告诉您ruby在哪个当前工作目录下运行脚本.假设它不在你最可能看到的地方.然后确保为windows正确指定了路径名.请参阅此处的文档,了解如何正确设置windows路径名的格式:

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

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

EDIT

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

Dir.chdir(File.dirname(__FILE__))

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

Ruby相关问答推荐

如何在Ruby中匹配大型IP网络对象列表中的IP地址

有没有更好的方法来加入剩余不变的子列表?

Ruby ERB 类给出未定义的局部变量或方法,但 erb 解析良好

Ruby 中的 Hash[key] 返回 nil 但 hash 没有 nil 值

如何从外部获取给定 lambda 的参数值,而不显式返回其绑定?

如何从 url 获取文件扩展名?

Ruby 中的 class() 与 type()

将ruby数组转换为连续对数组

VCRProxy:在 Capybara 内使用 VCR 记录 PhantomJS ajax 调用

Ruby - 查看端口是否打开

Ruby 2 中的命名参数

在 Pry 中有相当于 next 的吗?

RSpec allow/expec vs expect/and_return

Ruby 1.9:如何正确大写和小写多字节字符串?

是否可以使用 Ruby 读取文件的修改日期?

何时使用在 Ruby 中启动子进程的每种方法

使用哈希值呈现 ERB 模板

使用正则表达式进行 Ruby Electron邮件验证

Ruby:如何在不指向同一个对象的情况下复制变量?

如何判断一个类是否已定义?