I am Charmie

メモとログ

MatLabでフォルダ内のファイルリストを作成

フォルダ内にある全ての画像に対して処理を行う。これをMatLabでやろうとして試行錯誤。

必要な関数は
D = dir('directory_name')
これでdirectory_nameで指定したフォルダ内にあるファイルのリストを作成できる。
パス名とワイルドカードが使えると書いてあり、例えばフォルダ内の全てのMファイルのリストを作成したいならDIR .mとするそうだ。
返戻値はM-by-1の構造体で
name -- ファイル名
date -- 編集された日時
bytes -- バイト数
isdir -- nameがディレクトリなら1、そうでなければ0
datenum -- 編集された日時(MATLAB serial date number)

フォルダ内のファイル検索で、拡張子などを指定せずDIR
とすると、実際のファイル数より2多いサイズのリストが出来る。その理由は、リストの先頭にカレントディレクトリを示す'.'と親ディレクトリを示す'..'が格納されるから。
もし、フォルダ内に拡張子の異なる画像ファイルが入っていて、

  1. ある拡張子のファイルだけのリストを作りたい時
    list_img = dir([DIR_IMG, '.bmp']);

  2. 全ての画像ファイルのリストを作りたい時
    1. リストから強制的にカレントディレクトリと親ディレクトリの情報を取り除く
      % 全てのデータをテンポラリに格納(最初の2データはディレクトリ)
      list_tmp = dir([DIR_IMG, '
      .']);
      % 最初の2つのデータを除いたリストを作成
      list_img = list_tmp(3:size(list_tmp));
    2. リスト内のデータのファイルだけの情報を使う
      % 全てのデータをリストに格納
      list_img = dir([DIR_IMG, '
      .*']);
      for n = 1:size(list_img)
      % リストのn番目のデータがファイルかフォルダをチェック
      if(list_img.isdir(n) == 0)
      % ファイルであれば何か処理
      end
      end
という感じかなぁ。
他にもファイルをロードした時にエラーが出たら・・・という方法も考えられるが、いまいちスマートな感じがしない。