2016-05-27 4 views
0

Ich übe Ruby nach dem Wachsen, um Java mit einem einfachen Programm neu zu reset, das bestimmt, wie ähnlich ein paar tausend Dokumente sind. Ich machte dasselbe in Java Junior High Schools für ein Datenstrukturprojekt und schrieb tatsächlich das schnellste Programm, das der Lehrer je gesehen hatte (anscheinend), aber irgendwie kann ich das nicht auf Ruby übertragen.Ruby: Datei nicht gefunden Ausnahme, obwohl es existiert, und wird von der Schleife weitergegeben

Ich versuche, eine Reihe von Dateien zu erstellen:

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 

Als ich es im Terminal laufen, bekomme ich diese eher irritierend Ausnahme:

/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>' 

ich sicherstellen, überprüft die Dokument existiert. Es tat es. Lief es noch ein paar Mal. Das Gleiche mit dem gleichen Dokument. Natürlich habe ich versucht, das Dokument zu löschen. Aber dann tat es dasselbe für ein anderes Dokument. Und als ich dieses Dokument löschte, fand es ein Problem mit einem anderen Dokument mit eine höhere alphabetische Priorität, dass es schien gut mit den ersten beiden Mal um.

Warum kann es diese Dokumente nicht finden, und wenn sie nicht existieren, warum gibt die Schleife die Dateinamen an erster Stelle weiter? Was mache ich falsch? Warum ich?

(Auch ich bin mit Fedora mit Zimt, wenn dies keine Auswirkungen haben würde.)

Antwort

1

Ihr Arbeitsverzeichnis als das Verzeichnis anders ist Ihre Schleife durch. Sie können den Pfad, mit dem Sie arbeiten, als Zeichenfolge speichern und dann mit dem Dateinamen verknüpfen, den Sie aus der Schleife erhalten haben.

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 

Sie werden den Schrägstrich am Ende der path Variable müssen Sie den richtigen Pfad zu bauen.

Verwandte Themen