Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby';s File.open提供“文件”;没有这样的文件或目录-text.txt(Errno::enoint)";错误_Ruby - Fatal编程技术网

Ruby';s File.open提供“文件”;没有这样的文件或目录-text.txt(Errno::enoint)";错误

Ruby';s File.open提供“文件”;没有这样的文件或目录-text.txt(Errno::enoint)";错误,ruby,Ruby,我在Win7机器上安装了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

我在Win7机器上安装了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
analyzer.rb:1:in'initialize':没有这样的文件或目录-text.txt(Errno::enoint)
来自analyzer.rb:1:处于“打开”状态
来自analyzer.rb:1:in`'
退出代码:1

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

enoint
表示它不在那里

只需将代码更新为:

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

Dir.glob(".") 

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

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

put Dir.pwd

这将告诉您ruby运行脚本的当前工作目录。你很可能会发现它并不是你想象的那样。然后确保为windows正确指定了路径名。请参阅此处的文档,了解如何正确设置windows路径名的格式:

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

编辑

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

Dir.chdir(File.dirname(__FILE__))

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

除了在错误的目录中之外,我还被另一个变体绊倒了:

我有一个
文件.open(my|u文件)。每个{line | put line}
都在爆炸,但在我工作的目录中有一个同名的东西(命令行中的ls显示了名称)。我使用
文件进行了检查。是否存在?(我的\u文件)
奇怪地返回了
false
。说明:
my_file
是一个符号链接,目标已不存在!由于
File.exists?
将跟随一个符号链接,它将显示
false
,尽管链接仍然存在

请在STDIN中使用
chomp()
chomp()

i、 e.test1.rb

print 'Enter File name: '

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


fname_read = File.open(fname)

puts fname_read.read()
卡斯珀的回答也是如此:

puts Dir.pwd
一旦知道当前工作目录,就指定相对于该目录的文件路径

例如,如果您的工作目录是projectroot,您可以像下面这样直接打开它下面的文件

json_file = File.read(myfile.json)

谢谢你的回复。然而,这似乎没有帮助。尽管text.txt存在于Ruby安装目录中.rb文件旁边,但仍然会出现相同的错误。它可能找不到它的一些可能原因是什么?实际上最好的解决方案可能是
Dir.chdir(File.dirname(\uu File\uu))
。这样,您将保证工作目录与脚本相同。您还可以使用
File.open(File.expand_路径(\uuuuu FILE\uuuuu,
…正如文中所建议的那样。Dir.pwd成功了。它在看C:\Ruby192,而我把文本文件放在C:\Ruby192\bin中。一旦我把它放在正确的位置,它就像一个符咒一样工作。谢谢!@愤怒的骆驼:你一般不应该把文本文件放在那里。你越是在那里乱搞文件,不是他更可能是你要删除一些不应该删除的内容。谢谢!Nagios在后台运行ruby脚本时也遇到了同样的问题…
Dir.chdir
成功了!对于我们这些基于脚本错误盲目搜索此内容的人,这可能意味着你要查找的文件不存在!如果你的代码没有检查文件这可能是你的全部问题。