0

ファイルを作成してデータを入力した後、閉じる前に、パーツ データを読み取り、チェックサムを計算する必要があります。問題は、ファイルを閉じる前にデータを読み取れないことです。コード スニペットは次のとおりです。

私の質問は、ファイルを作成し、データを書き込み、ファイルの一部を読み取ってから閉じる方法です。考えられる解決策の 1 つは、ファイルに書き込む前にバッファーを使用することですが、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
4

1 に答える 1

1

あなたが直面している問題は、Ruby IOがファイルを読み込んで、ファイルのどこにあるかを追跡することです。データを書き出すと、IO オブジェクトの「シーク ヘッド」がファイルの最後にあります。次の行を求めても、一番下にあるため、何も得られません。

コードを変更して a をそのまま含めると、次のfile.rewindように機能します。

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

この#rewindメソッドは、「シーク ヘッド」をファイルの先頭に戻します。これが目的です。

于 2012-08-02T12:40:05.620 に答える