Я использую этот код для получения списка подкаталогов. Он присутствует в моем коде с 2015 года, но в настоящее время для его выполнения через несколько подпапок требуется 50 секунд.
Я однажды добавил его, поскольку сам MATLAB был на несколько медленнее, см. мой предыдущий вопрос .
function [sub] = subfolders (CurrPath,sub)
%------------------------------------------------
jFile = java.io.File(CurrPath); %java file object
jPaths = jFile.listFiles; %java.io.File objects
if numel(jPaths) > 100
% sub = {};
return
end
jNames = jFile.list; %java.lang.String objects
isFolder = arrayfun(@isDirectory,jPaths); %boolean
tempFolderList = cellstr(char(jNames(isFolder))); %cellstr
if nargin == 1
sub = {};
end
for i = 1:numel(tempFolderList)
currSubDir = tempFolderList{i};
if ~isempty(currSubDir)
sub{end+1} = fixPath([CurrPath '\' currSubDir]);
% add only if last folder does not contain probe
if ~stringContains(lower(currSubDir), 'probe')
if ~stringContains(lower(currSubDir), 'dg')
sub = subfolders(sub{end},sub);
end
end
end
end% if
end% functions
Есть ли другой и более быстрый способ добиться того же?
Использование Dir не является решением. Требуется 60 секунд, чтобы выполнить код
filelist = dir(fullfile(rootdir, '**\*.*')); %get list of files and folders in any subfolder
folderlist = filelist(filelist.isdir);