コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

ファイル名一覧の取得

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'の文字が付いているので、これを見て読み飛ばしています。
この関数を利用して、カメラ撮影した画像ファイルを読み出すプログラムを作ってみました。次のブログです。