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

时间:2011-02-01 23:28:59

标签: matlab filesystems dir

我想做两件事:

  1. 获取目录中所有目录名称的列表,
  2. 获取目录中所有文件名的列表
  3. 我怎样才能在MATLAB中做到这一点?

    现在,我正在尝试:

    dirnames = dir(image_dir);
    

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

3 个答案:

答案 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