写完后读取文件的一部分

时间:2012-07-31 23:39:38

标签: ruby file-io io

创建文件并在其中填充数据后,在关闭之前,需要读取零件数据和   计算校验和。问题是您在关闭文件之前无法读取数据。码   摘录如下。

我的问题是如何创建文件,写入数据,读取文件的一部分,然后关闭它?一   可能的解决方案是在写入文件之前使用缓冲区,但是如果不方便的话   文件很大,例如MB,GB,TB,PB。

  begin
  File.open(@f_name,"w+") do |file|

    @f_old_size.times do
      file.write "1"
    end

    file.flush
    file.sync

    #################
    # read file fails
    # before close
    #################
    while line = file.gets
      puts line
    end

  end
  rescue => err
   puts "Exception: #{err}"
  end

  #####################
  # read file successfully
  # after close it
  #####################
  File.open(@f_name,"r") do |file|
    line = file.gets
    puts line
  end

1 个答案:

答案 0 :(得分:1)

您遇到的问题是Ruby IO读取文件并跟踪文件中的位置。在写完数据后,IO对象的“搜索头”位于文件的底部。当你问下一行时,因为它在底部,你什么也得不到。

如果您将代码更改为包含file.rewind,则可以:

#################
# read file fails
# before close
#################
file.rewind  # <--  THIS IS THE ADDED LINE
while line = file.gets
  puts line
end

#rewind方法将“搜索头”设置回文件的开头,这是您要查看的内容。