我想做两件事:
- 获取目录中所有目录名称的列表,以及
- 获取目录中所有文件名的列表
如何在 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
不,您对 dirnames.name 返回的内容不正确。
D = dir;
这是一个结构数组。如果您想要一个目录列表,请执行此操作
isdirlist = find(vertcat(D.isdir));
或者我可以在这里使用 cell2mat。请注意,如果您只是尝试 D.name,则返回一个逗号分隔的列表。不过,您可以简单地将所有名称作为单元格数组获取。
nameslist = {D.name};
假设“image_dir”是一个目录的名称,下面的代码将向您展示如何确定哪些项目是目录,哪些是文件以及如何获取它们的名称。一旦你做到了这一点,构建一个仅包含目录或仅包含文件的列表就很简单了。
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