我想做两件事:
我怎样才能在MATLAB中做到这一点?
现在,我正在尝试:
dirnames = dir(image_dir);
但是我想这会返回一个对象列表。 size(dirnames)
返回属性数,dirnames.name
仅返回第一个目录的名称。
答案 0 :(得分:5)
函数DIR实际返回structure array,每个文件或给定目录中的子目录有一个结构元素。当getting data from a structure array时,使用点表示法访问字段将返回comma-separated list个字段值,每个结构元素具有一个值。这个以逗号分隔的列表可以collected into a vector放置在方括号[]
或cell array中,方法是将其放在花括号{}
中。
我通常希望通过使用logical indexing来获取目录中的文件或子目录名称列表,如下所示:
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
答案 1 :(得分:2)
没有。你对dirnames.name返回的内容不正确。
D = dir;
这是一个结构数组。如果您想要一个列表是目录,请执行此操作
isdirlist = find(vertcat(D.isdir));
或者我可以在这里使用cell2mat。请注意,如果您只是尝试D.name,则返回以逗号分隔的列表。您可以将所有名称作为单元格数组获取。
nameslist = {D.name};
答案 2 :(得分:0)
假设“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