不关闭此代码段中的文件是不好的做法吗?

时间:2012-05-10 06:37:27

标签: ruby file-io

关于我是否有必要关闭我在代码中明确打开的文件的一些想法。我来自C和C ++编程的背景,并开始通过Ruby导航。提前感谢您的反馈。

from_file, to_file = ARGV
script = $0

puts "Copying from #{from_file} to #{to_file}"
File.open(to_file, 'w').write(File.open(from_file).read())

puts "Alright, all done."

4 个答案:

答案 0 :(得分:6)

除非您在python中使用类似with语句的内容,否则不关闭文件总是不好的做法。

虽然脚本语言通常会在退出时关闭打开的文件,但是一旦完成文件就会更清楚 - 特别是在写入文件时。

Apparently Ruby有类似于python的with

File.open(from_file, 'r') do |f_in|
    File.open(to_file, 'w') do |f_out|
        f_out.write(f_in.read)
    end
end

相关文档:http://ruby-doc.org/core-1.9.3/File.html#method-c-open

答案 1 :(得分:2)

这是一个较短的版本:

File.write to_file, File.read(from_file)

答案 2 :(得分:1)

此代码(Matheus Moreira)自动关闭文件:

File.write to_file, File.read(from_file)

此代码无法关闭文件:

File.open(to_file, 'w').write(File.open(from_file).read())

我猜也会自动关闭。

答案 3 :(得分:0)

这是一个很好的答案,但将输出文件放在外部块并使用<<<<<<< :

File.open(to_file, 'w') do |f_out|
  f_out << File.open(from_file){|f| f.read}
end

注意阅读时你不需要'r'。