2016-05-27 3 views
0

私はRubyを練習し、数千ものドキュメントがどれほど似ているかを決定する簡単な小さなプログラムでJavaを再送します。私はデータ構造プロジェクトのために高等学校のJavaの年に同じことをしました、実際に教師が見たことのある最速のプログラムを書いていましたが(どうやらそれをRubyに転送することはできません)。Ruby:ファイルが存在しなくても例外が見つからず、ループで渡されます

私はファイルの配列を作成しようとしています:

array = Dir.foreach("/home/rj/Documents/Ruby Code/Catching Plaigarists/Large number of documents") do |filename| 
    File.new(filename, "r") unless filename.start_with?(".") #Prevents it from returning current and parent directories 
end 

私はターミナルでそれを実行すると、私はこのかなり刺激性の例外を取得:

/home/rj/Documents/Ruby Code/Catching Plaigarists/y_don_it_work.rb:2:in `initialize': No such file or directory @ rb_sysopen - bmu390.shtml.txt (Errno::ENOENT) 
    from /home/rj/Documents/Ruby Code/Catching Plaigarists/y_don_it_work.rb:2:in `new' 
    from /home/rj/Documents/Ruby Code/Catching Plaigarists/y_don_it_work.rb:2:in `block in <main>' 
    from /home/rj/Documents/Ruby Code/Catching Plaigarists/y_don_it_work.rb:1:in `foreach' 
    from /home/rj/Documents/Ruby Code/Catching Plaigarists/y_don_it_work.rb:1:in `<main>' 

を私が確認するためにチェック文書が存在した。それはしました。もう一度それをもう一度実行してください。同じ文書で同じこと。もちろん、私はその文書を削除しようとしました。しかしそれは他のいくつかの文書でも同じことをしました。そしてその文書を削除したときには、というより高いアルファベット順のある文書を使って、最初の2回でうまくいくように見える他の文書で問題を見つけることができました。

なぜこれらのドキュメントを見つけることができないのですか?それらのドキュメントが存在しない場合、なぜループが最初にファイル名を渡すのですか?私は間違って何をしていますか?なんでわたし?

(それがどんな影響を与える可能性がある場合にも、私は、シナモンとのFedoraを実行しているよ。)

答えて

1

あなたの作業ディレクトリは、あなたが通過ルーピングディレクトリとは異なります。作業中のパスを文字列として保存し、ループから戻ったファイル名に連結することができます。

path = "/home/rj/Documents/Ruby Code/Catching Plaigarists/Large number of documents/" 
array = Dir.foreach(path) do |filename| 
    File.new((path + filename), "r") unless filename.start_with?(".") 
end 

あなたは正しいパスを構築するためにpath変数の末尾にスラッシュが必要になります。

関連する問題