1. 程式人生 > >matlab遍歷資料夾下指定型別的檔案以及子資料夾

matlab遍歷資料夾下指定型別的檔案以及子資料夾

  • 檔案結構
    最近需要將資料夾下所有影象檔案的檔名匯出,只知道matlab的dir函式能夠獲取到目錄下的檔案以及資料夾名稱,卻不能遞迴的遍歷所有子資料夾,因此自己matlab編寫了一個函式,實現自己的需求

  • 程式碼實現

function name = foreachDir(mainPath)
    % 遍歷資料夾及檔案
    %   mainPath 主路徑
    %   name 滿足條件的檔名

    % 當前目錄下的檔案
    files = dir(mainPath);
    % 檔案數量
    len = length(files);

    name = {}
; index = 1; for ii = 1 : len % 跳過.以及..資料夾 if (strcmp(files(ii).name, '.') == 1) ... || (strcmp(files(ii).name, '..') == 1) continue; end % 遞迴呼叫函式,遍歷當前目錄下的資料夾(深度過深,可能會報錯) if files(ii).isdir == 1 tmpName = foreachDir(fullfile(mainPath, '\'
, files(ii).name)); for kk = 1 : length(tmpName) name{index} = tmpName(kk); index = index + 1; end end % 讀取指定型別的檔案(可根據自己需要修改) if ~isempty(strfind(files(ii).name, '.jpg')) ... || ~isempty(strfind(files(ii).name, '.png'
)) ... || ~isempty(strfind(files(ii).name, '.bmp')) name{index} = fullfile(mainPath, '\', files(ii).name); index = index + 1; end end end
  • matlab函式
    • strfind函式
      strfind(str,patten) ,查詢str中是否有pattern,返回出現位置,沒有出現返回空陣列 。
    • fullfile函式
      fullfile(‘dir1’, ‘dir2’, …, ‘filename’),利用檔案各部分資訊建立併合成完整檔名。
    • 呼叫
      name = foreachDir(‘yourselfPath’);
  • 遺留問題
    在實現過程中為了遍歷子資料夾,使用了遞迴實現,因此效率上有點低下;同時,遞迴實現在資料夾巢狀比較深的情況下,可能會報出錯誤(Java下會提示棧錯誤)。
    更重要的是,在檔案過濾處,自己知識根據自己需要指定了檔案字尾,並沒有詳細考慮檔案型別。