0

只是思考一下关闭我在代码中明确打开的文件的必要性。我来自 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

4 回答 4

6

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

虽然脚本语言通常会在退出时关闭打开的文件,但在您完成文件后立即执行此操作会更干净——尤其是在写入文件时。

显然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

于 2012-05-10T06:39:39.220 回答
2

这是一个较短的版本:

File.write to_file, File.read(from_file)
于 2012-05-10T12:43:29.407 回答
1

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

File.write to_file, File.read(from_file)

此代码中无法关闭文件:

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

我猜也自动关闭。

于 2012-05-10T15:15:43.173 回答
0

这是一个很好的答案,但将输出文件放在外部块上并使用 << 更“红宝石”:

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

请注意阅读时如何不需要'r'。

于 2012-05-10T09:52:56.193 回答