このブログエントリの続きです:
LUA で FlashAir の特定フォルダ内の最新ファイルを探す
↑この時の内容は、特定フォルダ「内」の最新ファイルを探す LUA スクリプトの紹介でしたが、ちょっとパワーアップして特定フォルダ「以下」の最新ファイルを探すようにしています。
特定フォルダ以下、といっても無限に探してくれるものではありません。実際のデジカメの挙動では、写真を撮影すると、"/DCIM/(どこかのディレクトリ)/***.jpg" みたいな感じで画像ファイルが格納されるらしいです。この「(どこかのディレクトリ)」という部分がメーカーによって変わったり、ある一定以上のファイルが1つのフォルダに貯まると別のディレクトリを作ったりして格納されるらしいのです(また聞き)。なので、この「(どこかのディレクトリ)」部分は最初に固定して考えるわけにはいかないが、これ以上の孫階層が作られるといったものでもない、ということだと思います。
で、その前提で「/DCIM 以下にある最新ファイルを探す」というスクリプトに作り変えてみました。要はサブフォルダが作られるとしたら1階層だけ作られて上で格納されるファイルの中で最新のものを探す、という内容に改良してみました、というものです:
これでかなり実用的になったはず。。
LUA で FlashAir の特定フォルダ内の最新ファイルを探す
↑この時の内容は、特定フォルダ「内」の最新ファイルを探す LUA スクリプトの紹介でしたが、ちょっとパワーアップして特定フォルダ「以下」の最新ファイルを探すようにしています。
特定フォルダ以下、といっても無限に探してくれるものではありません。実際のデジカメの挙動では、写真を撮影すると、"/DCIM/(どこかのディレクトリ)/***.jpg" みたいな感じで画像ファイルが格納されるらしいです。この「(どこかのディレクトリ)」という部分がメーカーによって変わったり、ある一定以上のファイルが1つのフォルダに貯まると別のディレクトリを作ったりして格納されるらしいのです(また聞き)。なので、この「(どこかのディレクトリ)」部分は最初に固定して考えるわけにはいかないが、これ以上の孫階層が作られるといったものでもない、ということだと思います。
で、その前提で「/DCIM 以下にある最新ファイルを探す」というスクリプトに作り変えてみました。要はサブフォルダが作られるとしたら1階層だけ作られて上で格納されるファイルの中で最新のものを探す、という内容に改良してみました、というものです:
last_fname = "" last_fpath = "" max_mod = 0 fpath = "/DCIM" 目的のフォルダ for dirname in lfs.dir(fpath) do dirpath = fpath .. "/" .. dirname mod_dir = lfs.attributes( dirpath, "mode" ) if mod_dir == "directory" then サブフォルダを再度調べる for filename in lfs.dir(dirpath) do filepath = dirpath .. "/" .. filename mod = lfs.attributes( filepath, "modification" ) if mod > max_mod then max_mod = mod last_fname = filename last_fpath = filepath end end else fpath 直下にファイルがあった場合は対象にする mod = lfs.attributes( dirpath, "modification" ) if mod > max_mod then max_mod = mod last_fname = dirname last_fpath = dirpath end end end : (この時点で last_filepath に最新ファイルのパスが格納されている) :
これでかなり実用的になったはず。。