我有两个需要做的事情:
- 获取一个目录中所有子目录的名称列表
- 获取一个目录中所有文件的名称列表
我该如何在MATLAB中实现呢?
目前,我的尝试是:
dirnames = dir(image_dir);
但是它返回一个对象列表,我想。 size(dirnames)
返回属性数量,而 dirnames.name
仅返回第一个目录的名称。
我有两个需要做的事情:
我该如何在MATLAB中实现呢?
目前,我的尝试是:
dirnames = dir(image_dir);
但是它返回一个对象列表,我想。 size(dirnames)
返回属性数量,而 dirnames.name
仅返回第一个目录的名称。
函数DIR实际上返回一个结构数组,每个文件或子目录在给定目录中对应一个结构元素。当从结构数组获取数据时,使用点符号访问字段将返回一个逗号分隔的列表,其中每个结构元素对应一个字段值。可以通过将此逗号分隔列表放入方括号[]
中将其收集成向量,也可以通过将其放入花括号{}
中将其收集成单元数组。
我通常喜欢使用逻辑索引来获取目录中文件或子目录的名称列表,示例如下:
dirInfo = dir(image_dir); %# Get structure of directory information
isDir = [dirInfo.isdir]; %# A logical index the length of the
%# structure array that is true for
%# structure elements that are
%# directories and false otherwise
dirNames = {dirInfo(isDir).name}; %# A cell array of directory names
fileNames = {dirInfo(~isDir).name}; %# A cell array of file names
D = dir;
isdirlist = find(vertcat(D.isdir));
或者我可以在这里使用cell2mat。请注意,如果您只尝试D.name,则会返回逗号分隔的列表。但是,您可以将所有名称仅作为单元数组获取。
nameslist = {D.name};
dirnames = dir(image_dir);
for(i = 1:length(dirnames))
if(dirnames(i).isdir == true)
% It's a subdirectory
% The name of the subdirectory can be accessed as dirnames(i).name
% Note that both '.' and '..' are subdirectories of any directory and
% should be ignored
else
% It's a filename
% The filename is dirnames(i).name
end
end