递归读取某文件夹及其子文件夹中,后缀为".mat"的文件路径
方式一:递归函数
clc; clear; close all;
fclose all;
fileDir = 'F:\数据';
dataPath = getAllDataPath(fileDir); % 递归读取fileDir路径下的".mat"文件的路径
%% 递归读取fileDir路径下的".mat"文件的路径
function dataPath = getAllDataPath(fileDir)
subDirs = dir(fileDir); % 列出当前文件夹中的文件和文件夹
dataPath = [];
for i = 1:length(subDirs)
% 判断是否为文件夹,如果是则递归;如果否,则查找后缀为".mat"的文件
if subDirs(i).isdir && subDirs(i).name ~= "." && subDirs(i).name ~= ".."
recursionDir = [subDirs(i).folder, '\', subDirs(i).name];
dataPath = [dataPath; string(getAllDataPath(recursionDir) )];
elseif subDirs(i).name ~= "." && subDirs(i).name ~= ".." && subDirs(i).name(end-3:end) == ".dat"
filePath = [subDirs(i).folder, '\', subDirs(i).name];
dataPath = [dataPath; string(filePath)];
end
end
end
打印函数返回dataPath
就是matlab递归读取文件夹以及子文件夹中所有.mat后缀文件。
方式二:dir函数特性
获取C:/Users/Administrator/Desktop文件夹下(不包含子文件夹)的所有.mat文件
clear
dirOutput = dir('C:/Users/Administrator/Desktop/**/*.mat');
folder = string({dirOutput.folder}');
file = string({dirOutput.name}');
filepath = strcat(folder, '\', file);
封装成函数。调用时若输入两个参数,则默认搜索子文件夹
function filepath = getFilesPath(baseDir, ext, findSubfile)
if nargin == 2 % 判断输入的参数是否为2
findSubfile = true;
end
if findSubfile
dirOutput = dir([baseDir '/**/*.' ext]);
else
dirOutput = dir([baseDir '/*.' ext]);
end
folder = string({dirOutput.folder}');
file = string({dirOutput.name}');
filepath = strcat(folder, '\', file);
end
调用方法
getFilesPath('C:/Users/Administrator/Desktop', 'mat')
得到同样的结果。