ErlangでファイルのMD5計算

30分プログラム、その664。ErlangでファイルのMD5計算をやってみました。
本当は、md5ベースで重複ファイルの削除をするぜ、みたいなことをやりたかったんです。でも、特定ファイルのmd5を計算するだけで時間が立ってしまいました。特にio_lib:formatに渡す書式文字列が強敵でした。

使い方

1> md5:md5_file("foo.txt").
"1f83a7283ad5fdb12130895272bf4634"

ソースコード

-module(md5).
-compile([export_all]).

-import(file, [read_file/1]).

hex(N)->
    io_lib:format("~2.16.0b",[N]).

md5_file(Filename)->
    {ok,Data} = read_file(Filename),
    lists:flatten(lists:map(fun hex/1,
			    binary_to_list(erlang:md5(Data)))).