rubyでCRC-32チェック(改訂版)
以前、rubyでCRC-32を計算するスクリプトを書きましたが、ちょっと問題があるコードだと判明したので、書き直しました。(自分で使おうとしてコピペして実行してたら問題点に気づきました。。"Eat Your Own Dog Food"ってやつですね。)
ファイルをバイナリモードで開き、8kbyteのバッファに読み込んでチェックするコードになっています。
#!/usr/bin/ruby require "zlib" filename = ARGV[0] # 1つ目の引数を対象ファイル名とします. ret_crc32 = 0 # CRC初期値. MAX_BUF_SIZE = 8192 # 8*1024 byte のバッファ. buf = [""].pack('a8192') File.open( filename, 'rb' ) do |fp| while fp.read(MAX_BUF_SIZE, buf) ret_crc32 = Zlib.crc32(buf, ret_crc32) end end p "CRC32 for [#{filename}] is [#{ret_crc32}]"
前回とインターフェイスは同じで、スクリプトに与えた1つ目の引数に与えたファイル名のファイルを開き、調べたCRC-32の値をプリントしています。