我正在尝试使用ruby中的标准文件i / o将某些状态记录到文件中。该文件只有一行,其中包含一个数字。我想在行中阅读,然后在循环的每次迭代中我想更新这个数字。
我知道我可以用
在文件中阅读file = File.open('out.log', 'a+')
num = file.readline
问题是,我不知道如何在循环中覆盖第一行,而不是每次迭代都重新打开文件,即
file = File.open('out.log', 'w')
将创建一个空文件
答案 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