Ruby - 读取文件,替换内容,然后关闭

时间:2017-06-08 23:47:20

标签: ruby

如何打开文件,阅读文件,然后写入文件替换整个内容,然后将其关闭?

我可以这样做:

File.open('foo.bin', 'r') do |f|
  contents = f.read
end
# do something with the contents
File.open('foo.bin', 'w') do |f|
  f.print contents
end

但是有2个IO打开步骤和2个IO关闭步骤,并且将IO步骤加倍似乎是完全浪费,更不用说在磁盘上使用的次数与脚本中可能发生的次数相当多。

有没有办法打开,读取,覆盖,然后关闭?

1 个答案:

答案 0 :(得分:3)

首先,如果您没有对代码进行分析,请立即执行此操作。额外的文件打开/关闭不太可能是您减速的原因。分析将显示真正的问题所在。

我不相信这会更快,但以下是一次打开和关闭的一般步骤。

  1. 开放阅读&写。
  2. 读取整个文件(不是逐行)。
  3. 截断文件。
  4. 回到开头。
  5. 写入。
  6. 关闭。
  7. 在Ruby中,你这样做:

    # Open the file for read/write.
    File.open("test.data", "r+") { |f|
        # Read the whole file
        contents = f.read
    
        # Truncate the file
        f.truncate(0)
    
        # Jump back to the beginning
        f.rewind
    
        # Write the new content
        f.write("new stuff\n")
    }