Как я могу получить список всех имен каталогов и / или всех файлов в определенном каталоге в MATLAB? - PullRequest
3 голосов
/ 02 февраля 2011

Я хочу сделать две вещи:

  1. Получить список всех имен каталогов в каталоге и
  2. Получить список всех имен файлов в пределахкаталог

Как я могу сделать это в MATLAB?

Сейчас я пытаюсь:

dirnames = dir(image_dir);

но это возвращает список объектов, ясчитать.size(dirnames) возвращает количество атрибутов, а dirnames.name возвращает только имя первого каталога.

Ответы [ 3 ]

5 голосов
/ 02 февраля 2011

Функция 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 голосов
/ 02 февраля 2011

Нет. вы не правы относительно того, что возвращает dirnames.name.

D = dir;

Это структурный массив. Если вы хотите список каталогов, сделайте это

isdirlist = find(vertcat(D.isdir));

Или я мог бы использовать cell2mat здесь. Обратите внимание, что если вы просто попробуете D.name, возвращает список через запятую. Вы можете получить все имена в виде массива ячеек просто.

nameslist = {D.name};
0 голосов
/ 02 февраля 2011

Предполагая, что "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
...