使用File.open块后无法删除目录/文件

时间:2011-07-15 11:51:38

标签: ruby file-io

尝试删除目录(+内容)并在读取内部文件后,FileUtils.rm_rf(path)不会删除所有文件夹,但会删除所有文件和部分文件夹。

经过一些实验,它似乎与File.open块有关。 (我实际上在块中进行了正则表达式匹配,但我只是在这里使用put来保持清晰)

File.open(file).each do |line|
  puts line
end

从我读过的内容来看,上面应该自动关闭文件,但是在使用它时,FileUtils无法完成任务。

但是,如果我使用以下代码,FileUtils将按需运行。

open_file = File.open(file)
open_file.each do |line|
  puts line
end
open_file.close

在第二个例子中使用代码没什么大不了的,但我更喜欢第一个代码的清洁度。

第一个示例是否有任何理由破坏FileUtils?

P.S。我是Ruby和Stack Overflow的新手......嗨。我的系统是Ubuntu 11.04(64位),使用Ruby 1.9.2-p180运行RVM

1 个答案:

答案 0 :(得分:1)

你应该使用这样的东西:

File.open(file) do |f|
  f.each{|line| puts line}
end

在您的示例中,块被提供给每个方法,并且执行open而不是块的版本,返回调用每个方法的IO对象。