1. ホーム
  2. ruby

[解決済み] RubyのFile.openで "No such file or directory - text.txt (Errno::ENOENT)" というエラーが発生する。

2022-02-13 11:27:06

質問内容

Win 7 マシンに Ruby 1.9.2 をインストールしました。簡単な analyzer.rb ファイルを作成します。この1行がある。

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 が、ダメでした。何が足りないのでしょうか?

解決方法は?

を把握することから始めましょう。 現在の作業ディレクトリ は、実行中のスクリプトのためのものです。
この行を冒頭に追加します。

puts Dir.pwd .

これは、rubyがどのカレントワーキングディレクトリでスクリプトを実行しているかを示しています。おそらく、あなたが想定している場所とは異なることがわかるでしょう。次に、パス名が正しく指定されていることを確認してください。Windows用のパス名を正しく指定する方法については、こちらのドキュメントを参照してください。

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

次に Dir.chdir で作業ディレクトリを text.txt がある場所に変更するか、上記の IO ドキュメントの指示に従ってファイルの絶対パス名を指定します。これでできるはずです...

編集

スクリプトファイルの中にテキストファイルを置く場合、最も便利な第3の解決策を追加します。

Dir.chdir(File.dirname(__FILE__))

これにより、現在の作業ディレクトリが自動的に .rb ファイルを作成し、スクリプトを実行します。