如何在MATLAB中获取特定目录中所有目录名称和/或所有文件列表?

3

我有两个需要做的事情:

  1. 获取一个目录中所有子目录的名称列表
  2. 获取一个目录中所有文件的名称列表

我该如何在MATLAB中实现呢?

目前,我的尝试是:

dirnames = dir(image_dir);

但是它返回一个对象列表,我想。 size(dirnames) 返回属性数量,而 dirnames.name 仅返回第一个目录的名称。

3个回答

5

函数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

2
不,你对dirnames.name返回的内容是错误的。
D = dir;

这是一个结构数组。如果你想要列出哪些是目录,请这样做:
isdirlist = find(vertcat(D.isdir));

或者我可以在这里使用cell2mat。请注意,如果您只尝试D.name,则会返回逗号分隔的列表。但是,您可以将所有名称仅作为单元数组获取。

nameslist = {D.name};

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接