2012-10-11 14 views
5

私は非常に初心者です。私はファイルを読み書きすることを学びたいと思います。ここに私がしようとしているものがあります。 /directoriesblahblah/ubuntu3.rb:同じディレクトリのファイルからどのように読み込むのですか?

rdfile = File.open('bhaarat.txt', 'r+') 

残念ながら、これは」Cを返していない1: '初期化' に:そのようなファイルやディレクトリ - bhaarat.txtを(errnoに:: ENOENT)

私が持っています解決策を見つけましたが、私はそれらのうち、私には意味を成していた答えを得ることができなかったので、私は、Rubyに新しいが、一般的には、プログラミングに新しいものではないだけだ。事前に

ありがとう!

+2

解決方法を投稿できますか? –

答えて

9

へのパスを取得するには現在のファイル、あなたは使用することができます:

あなたが使用することができます
__FILE__ 

現在のファイルが存在するディレクトリを取得するには、:

File.dirname(__FILE__) 

文字列からパスを作成するには、使用することができますので

File.join('part1', 'part2', ...) 

、作成しますそのディレクトリ内のファイルへのパスは、次のように使用できます。

File.join(File.dirname(__FILE__), 'filename') 

File.join(File.dirname(__FILE__), 'bhaarat.txt') 

あなたのコードでそれを置き換える場合は、あなたが得る:

rdfile = File.open(File.join(File.dirname(__FILE__), 'bhaarat.txt'), 'r+') 

したい場合は、また作るために、この別の変数にすることができ、電子名はなり上記、bhaarat.txtですコードはより読みやすくなります:

+0

+1、非常に徹底的な回答 –

+0

私はDir.pwdを印刷し、間違ったディレクトリを探していました!だから私は最初にそれが正しいディレクトリであることを確認する必要があると思います。ご協力いただきありがとうございます! – vheissu

+0

Dir.pwdへの結合は実際には役に立たず、パスはデフォルトで相対パスになります。 –

2

ファイルは、スクリプトが置かれているディレクトリではなく、現在のディレクトリで検索されます。

C:\> ruby scripts\ubuntu3.rb 
No such file or directory - bhaarat.txt 

最初にファイルの場所に移動し、スクリプトを実行します。たとえば、ファイルがスクリプトと同じディレクトリにある場合は、次のようになります。

C:\> cd scripts 
C:\scripts> ruby ubuntu3.rb 
1

トリックを実行したものが見つかりました。少し難しく検索しthisが見つかりました:

は、私は私の元のコード

rdfile = File.open('bhaarat.txt', 'r+') 

rdfile = File.open(File.join(File.dirname(__FILE__),'bhaarat.txt'), 'r+') 

に変更し、それはそれは、ディレクトリの代わりに、あなたの.RBファイルのディレクトリに見えるのですコマンドプロンプトが現在表示されていることを確認してください。

+1

しかし、 'File.join'があなたが使用しているOSの正しいパスを作成するので、' + '/ ...' 'の代わりに' File.join'を使うのが好きですか?たとえば、Windowsではパスは 'C:\ ... \ file.txt'のようになりますが、Linuxでは'/home /.../file.txt'のようになります。 – rid

+0

ありがとう!あなたの提案に合わせて私のソリューションを変更しました。 – vheissu

関連する問題