matlab遍歷資料夾下指定型別的檔案以及子資料夾
阿新 • • 發佈:2019-02-15
檔案結構
最近需要將資料夾下所有影象檔案的檔名匯出,只知道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’);
- strfind函式
- 遺留問題
在實現過程中為了遍歷子資料夾,使用了遞迴實現,因此效率上有點低下;同時,遞迴實現在資料夾巢狀比較深的情況下,可能會報出錯誤(Java下會提示棧錯誤)。
更重要的是,在檔案過濾處,自己知識根據自己需要指定了檔案字尾,並沒有詳細考慮檔案型別。