2005/11/01(火) [n年前の日記]
#4 [prog] 画像ファイルの内容をperlスクリプトで確認するところで悩む
某お絵かき掲示板の、過去ログ更新用スクリプトの作成を始めているのだけど。画像ファイルを、過去ログ保存用ディレクトリに自動でコピーするところで悩む。
過去ログ保存用ディレクトリには、いくつか、実際の画像とは異なる画像ファイル *1 が存在していて。それらファイルの存在チェックをして、「この画像ファイルはコピーする必要なし」という結果になってしまう。どうせなら、それらファイルに対して、上書きコピーしていいかどうかまで自動で判別させたい。が、どんな方法があるだろう。
チェックサムの類を求めればいいのかな。MD5 等を算出して。とはいえ、それだと、全てのファイルに対してMD5算出をするような処理になりそうでもあるし。さてはて。…事前にファイルサイズを確認すれば、多少は MD5算出の回数も減るかしら。
過去ログ保存用ディレクトリには、いくつか、実際の画像とは異なる画像ファイル *1 が存在していて。それらファイルの存在チェックをして、「この画像ファイルはコピーする必要なし」という結果になってしまう。どうせなら、それらファイルに対して、上書きコピーしていいかどうかまで自動で判別させたい。が、どんな方法があるだろう。
チェックサムの類を求めればいいのかな。MD5 等を算出して。とはいえ、それだと、全てのファイルに対してMD5算出をするような処理になりそうでもあるし。さてはて。…事前にファイルサイズを確認すれば、多少は MD5算出の回数も減るかしら。
◎ _Perl表技集 :
非常に参考になるページ。ありがたや。
_定数を使う
方法があったとは知らなかった。
_MD5の取得 が出来るのか。ActivePerl のドキュメントを見たら、一応載ってるらしく。これでなんとかなるかも。 _ファイルを一文字列として読み込む という方法もあった。
_Digest::MD5 - MD5アルゴリズムへのPerlインターフェース という文書も。
下のような感じかしら。
_MD5の取得 が出来るのか。ActivePerl のドキュメントを見たら、一応載ってるらしく。これでなんとかなるかも。 _ファイルを一文字列として読み込む という方法もあった。
_Digest::MD5 - MD5アルゴリズムへのPerlインターフェース という文書も。
下のような感じかしら。
#!/usr/bin/perl
use Digest::MD5;
my $file = "H:/temptemp/test_oekakibbsbkup/test/kakolog/7001_7100/oekaki_7001.png";
{
open(FILE,$file) || die $!;
binmode FILE;
my $imgbin;
{
local $/ = undef;
$imgbin = <FILE>;
}
close(FILE);
my $md5 = Digest::MD5->new;
$md5->add($imgbin);
print $md5->hexdigest, "\n";
print $md5->b64digest, "\n";
}
# 別の方法
{
open(FILE, $file) || die $!;
binmode(FILE);
my $md5 = Digest::MD5->new;
while (<FILE>) {
$md5->add($_);
}
close(FILE);
print $md5->hexdigest, "\n";
print $md5->b64digest, "\n";
}
*1: 「Coming Seen」と書いてある画像。
[ ツッコむ ]
以上です。