【发布时间】:2013-11-29 11:10:53
【问题描述】:
我想要一份所有完整子文件夹的列表。该列表不应包含任何父文件夹。
我使用
获取目录列表dirs = regexp(genpath(basePath),['[^;]*'],'match');
但是,这些功能真的很慢。可能是因为我的文件夹包含数千个文件。
父文件夹的removefall是这样完成的:是否有可能在代码大小和速度方面进行优化?
function [ ListOfDirs ] = findsubfolders( basePath )
dirs = regexp(genpath(basePath),['[^;]*'],'match');
index = 0;
for k = 1:numel(dirs)
currFolder = dirs{k};
if numel(strrep(currFolder, basePath,'')) ~= 0
if isempty(strfind(currFolder, 'remove'))
index = index + 1;
selectedDirs{index} = currFolder;
end
end
end
dirs = selectedDirs;
idx = 0;
for k = 1:numel(dirs)
currFolder = dirs{k};
isNotParentFolder = false;
for s = 1:numel(dirs)
if s ~= k
compFolder = dirs{s};
if numel(strrep(strrep(currFolder, compFolder,''),currFolder,'')) ~= 0
isNotParentFolder = true;
end
end
if isNotParentFolder
idx = idx + 1;
ListOfDirs{idx} = currFolder;
break;
end
end
end
end
【问题讨论】:
-
genpath方法(和其他建议?)基本上是递归调用dir。众所周知,这非常慢(对于网络驱动器?)。也许这会有所帮助:stackoverflow.com/questions/6385531/very-slow-dir-in-matlab
标签: matlab recursion find directory