1

我遇到了一个问题,即下载到本地文件会锁定它,直到我杀死了 ruby​​ 脚本。凭直觉,我改变了调用的形式,现在它没有锁定文件。

有人能告诉我为什么下面的第二种形式不锁定文件,但第一种形式可以吗?

此表单锁定本地文件:

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) }

谢谢。

4

1 回答 1

2

使用块调用 open 方法通常会在块执行完成后立即关闭文件。如果没有块,则 open 返回一个文件(句柄),该文件(句柄)将在下一次垃圾回收发生时被释放。

于 2009-06-12T15:18:38.780 回答