我在matlab中有一个函数(带有一个实际调用函数的包装器),递归地找到计算机上给定HDD中的所有.mat文件。在每次返回时,它都会提供特定文件夹中的文件,因此,由于驱动器上有数百个文件夹(按日期组织),因此有数百个返回。
我试图制作这些文件的一个列表(或矩阵),以便另一个脚本可以使用此列表来完成它的工作。
实际返回是结构列表(包含文件信息的字段)。 返回总是一个宽,一个长度取决于文件夹中的文件数。
简而言之,我想知道如何获取递归函数的所有返回值并将它们放入一个列表/矩阵中。
任何提示将不胜感激! 谢谢
function direc = findDir(currentDir)
dirList = dir(currentDir);
if 2 == length(dirList)
direc = currentDir
files = dir([currentDir '*.mat'])
return
end
dirList = dirList(3:length(dirList));
fileListA = dir([currentDir '*.mat']);
if 0==isempty(fileListA)
direc = currentDir
files = dir([currentDir '*.mat'])
return
end
for i=1:length(dirList)
if dirList(i).isdir == 1
[currentDir dirList(i).name '\'];
findDir([currentDir dirList(i).name '\']);
end
end
end
答案 0 :(得分:0)
您可以使用filesttrib
,它以递归方式搜索所有文件,并输出一个结构数组,其中包含有关这些文件的信息。然后删除文件夹,并仅保留名称以'.mat'
结尾的文件。
要检查文件名是否以'.mat'
结尾,请使用regexp
。请注意,如果字符串name(end-3:end)=='.mat'
太短,则name
之类的直接比较将失败。
currentDir = 'C:\Users\Luis\Desktop'; %// define folder. It will be recursively
%// searched for .mat files
[~, f] = fileattrib([currentDir '\*']); %// returns a structure with information about
%// all files and folders within currentDir, recursively
fileNames = {f(~[f.directory]).Name}; %// remove folders, and keep only name field
isMatFile = cellfun(@(s) ~isempty(regexp(s, '\.mat$')), fileNames); %// logical index
%// for mat files
matFileNames = fileNames(isMatFile);
变量matFileNames
是字符串的单元格数组,其中每个字符串都是.mat
文件的全名。