【发布时间】:2012-07-29 20:09:30
【问题描述】:
创建文件并将数据填充到其中后,在关闭之前,需要读取部分数据并 计算校验和。问题是您无法在关闭文件之前读取数据。代码 sn-p如下。
我的问题是如何创建文件,写入数据,读取文件的一部分,然后关闭它?一 可能的解决方案是在写入文件之前使用缓冲区,但如果 文件很大,比如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
【问题讨论】:
-
我不知道 Ruby,但那些看起来像普通的 stdio
fopen标志.. 而不是使用'w',你为什么不使用'a'打开文件进行追加(阅读和写作)? -
在 ruby 中,“a”模式不可读
-
文件在被读取或写入时通常被锁定。一次读取/写入文件是可能的,尽管很棘手、容易出错且不被认为是好的做法。
-
为什么要在关闭文件之前获取校验和?如果你想将校验和写入文件,那么你没有得到文件的校验和,校验和本身会改变校验和。如果你想要数据+校验和,那么你可以将数据存储在内存中,并一步存储数据和校验和。