2009-06-12 6 views
1

Ich hatte ein Problem, bei dem das Herunterladen in eine lokale Datei es blockierte, bis ich das Ruby-Skript beendete. Ich habe die Form des Anrufs geändert und jetzt wird die Datei nicht gesperrt.Ruby open-uri Dateisperrung

Kann mir jemand sagen, warum die zweite Form nicht die Datei sperrt, aber die erste?

Diese Form sperrt die lokale Datei:

open(ver_local_zip, "w+").write(open(remote_zip, :proxy=>ftp_proxy).read) 

Diese Form sperrt die Datei nicht:

open(ver_local_zip, "w+") { |f| f.write(open(remote_zip, :proxy=>ftp_proxy).read) } 

Dank.

Antwort

2

Der Aufruf der Methode, die mit einem Block geöffnet wird, schließt normalerweise die Datei unmittelbar nach der Ausführung des Blocks. Ohne einen Block, öffnen Sie eine Datei (Handle), die freigegeben wird, wenn die nächste Garbage Collection stattfindet.

+0

Was ich vermutete. Danke für die Antwort. – digitalsanctum

+1

Beachten Sie, dass Sie das zurückgegebene Handle manuell freigeben können (und sollten), wenn Sie die erste Methode verwenden, anstatt auf den GC zu warten. – Eli

Verwandte Themen