ensure使い慣れん
例外処理でbeginとrescueを使っていたのですが、ensureを使いなれてないことがわかりました。ensureは例外の有無にかかわらずbegin式の最後に記述する処理を実行するもの。
今回は暗号処理をしたものには必ずresetメソッドを呼び出すために使いました。
def encrypt(file, pass) enc = OpenSSL::Cipher::AES256.new("CBC") enc.encrypt() enc.pkcs5_keyivgen(pass) begin File.open(file, "rb") do |fin| File.open("#{file}.sec", "wb") do |fout| while buff = fin.read(8000) fout.write(enc.update(buff)) end fout.write(enc.final()) end end ensure enc.reset() end end
File.openでエラーが出た場合は、本文のほうで例外処理をしてあります。
begin encrypt(arg, pass) puts("#{arg}を暗号化したファイル#{arg}.secを作成しました。") rescue puts("#{arg}の暗号化に失敗しました。") end