2009-06-12 3 views
1

У меня была проблема, когда загрузка в локальный файл была заблокирована, пока я не убил скрипт ruby. По-моему, я изменил форму вызова, и теперь он не блокирует файл.Блокировка файла ruby ​​open-uri

Может кто-нибудь сказать мне, почему вторая форма ниже не блокирует файл, но первый делает?

Эта форма фиксирует локальный файл:

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

Эта форма не блокирует файл:

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

Спасибо.

ответ

2

Вызов метода, открытого блоком, обычно закрывает файл сразу после завершения выполнения блока. Без блока, откройте возвратить файл (дескриптор), который будет освобожден при следующей сборке мусора.

+0

То, что я подозревал. Спасибо за ответ. – digitalsanctum

+1

Обратите внимание, что вы можете (и должны) освободить возвращаемый дескриптор вручную при использовании первого метода, а не ждать GC. – Eli

Смежные вопросы