Ruby:覆盖文件中的行

时间:2015-01-07 12:08:34

标签: ruby file-io

我正在尝试使用ruby中的标准文件i / o将某些状态记录到文件中。该文件只有一行,其中包含一个数字。我想在行中阅读,然后在循环的每次迭代中我想更新这个数字。

我知道我可以用

在文件中阅读
file = File.open('out.log', 'a+')
num = file.readline

问题是,我不知道如何在循环中覆盖第一行,而不是每次迭代都重新打开文件,即

file = File.open('out.log', 'w')

将创建一个空文件

2 个答案:

答案 0 :(得分:3)

无需每次都打开它:

file = File.open('out.log', File::RDWR)
10.times do |i|
    file.seek(0) # rewind to the beginning of the file (line in your case)
    file.write("iteration #{i}") # write what you want

    # the following is just in order to show what was written
    file.seek(0)
    puts file.readline
end
file.close

答案 1 :(得分:0)

当块自动退出时,您可以使用IO::open和块关闭文件。

File.open("#{__dir__}/test.txt", File::RDWR) do |file|
  10.times do |i|
    file.rewind
    file.puts("iteration #{i}")
  end
end

puts File.read("#{__dir__}/test.txt")
# >> iteration 9