ファイル名一覧の取得
SDメモリカードにあるファイル名を取得したい場合にどうすればいいか。適当なサンプルを作ってみました。別にSDメモリカードでなくても、アクセス権限のあるフォルダであれば、どのフォルダにあるファイル名でも取得することができます。
getFilename( folder )
これはコマンドではなくて、Luaのスクリプトです。フォルダを引数にして実行すると、ファイル名が格納されたテーブルが返ってきます。
------------------------------------------ --ファイル名を読み込みます --ファイル名を取得したテーブルが返ります ------------------------------------------ function getFilename( folder ) local fp local msg local str local t={} local i = 1 local tmpFile = LuaPath.."files.tmp" --ファイル名を書き出すテンポラリファイル local fname={} --os.execute()を用いて、ls -l を行い、フォルダ内容をファイルに書き出す。 os.execute( "ls -l '"..folder.."' > "..tmpFile ) --ファイルを開きます fp,msg = io.open( tmpFile, "r") if( not(fp) )then dialog( tmpFile.."がオープンできません","プログラムを終了します", 0 ) return end --データを読み込みます while(true)do str = fp:read("*l") --1行読み込み if( str==nil )then break end --読込むデータが無ければ終了 str = string.gsub( str,"\r","" ) --改行コードを外す --dで始まっているものはフォルダなので無視する if( string.sub( str, 1, 1 )~="d" )then t = split( str, ":" ) --コロンで分ける。 --ファイルのみを抽出します fname[i] = string.sub( t[2], 4 ) --t[2]の4文字目以降がファイル名 i = i + 1 end end io.close(fp) return fname --ファイル名テーブルを返す end
os.execute()を使って、linuxのlsコマンドを発行しています。その結果をテンポラリファイルfiles.tmpに吐き出して、そこからファイル名を取り出しています。files.tmpには下記のような内容が書かれています。
----rwxr-x system sdcard_rw 604569 2010-11-03 03:36 2010-11-03 11.36.21.jpg ----rwxr-x system sdcard_rw 322820 2010-11-03 08:21 2010-11-03 16.21.41.jpg ----rwxr-x system sdcard_rw 423103 2010-11-03 08:24 2010-11-03 16.24.07.jpg ----rwxr-x system sdcard_rw 440545 2010-11-03 08:24 2010-11-03 16.24.29.jpg ----rwxr-x system sdcard_rw 549412 2010-11-03 08:24 2010-11-03 16.24.36.jpg d---rwxr-x system sdcard_rw 2010-11-08 09:34 Test
この後半部分がファイル名です。フォルダは先頭に'd'の文字が付いているので、これを見て読み飛ばしています。
この関数を利用して、カメラ撮影した画像ファイルを読み出すプログラムを作ってみました。次のブログです。