2015-11-12 2 views
1

Я пытаюсь получить абсолютный путь для всех подпапок в project_dirs.Получить список всех подкаталогов в Matlab

project_dirs='D:\MPhil\Model_Building\Models\TGFB\Vilar2006\SBML_sh_ver\vilar2006_SBSH_test7\Python_project3_IQM_project'; 
all_project_dirs=dir(project_dirs) 
for i=all_project_dirs, 
    full_dir=fullfile(project_dirs,i.name) 

В приведенном выше коде приведена одна строка всех каталогов подпапок, объединенных вместе. Как мне изменить свой код, чтобы получить массив ячеек этих абсолютных путей?

ответ

3

Для этого есть функция: genpath(). Он даст вам все каталоги рекурсивно в строке, разделенной на :. Используйте strsplit(), чтобы проанализировать результат.

1

Вы можете сделать это:

all_project_dirs = {all_project_dirs([all_project_dirs.isdir]).name}; 

Как это работает:

  1. Это выбирает, среди элементов all_project_dirs, те, которые являются каталогами;
  2. Из них он получает поле name;
  3. Значения этого поля объединены в массив ячеек.

Вы можете удалить первые два названия каталогов, которые всегда '.' и '..':

all_project_dirs = all_project_dirs(3:end); 

Чтобы получить полные пути, вы можете использовать strcat:

all_project_dirs = strcat(project_dirs, filesep, all_project_dirs); 

или, как предлагает Йорген, использовать fullfile:

all_project_dirs = fullfile(project_dirs, all_project_dirs); 
+0

Привет Луис, спасибо за ответ. Это отлично работает, но знаете ли вы, как получить абсолютные пути? Когда я пытаюсь 'strcat (all_project_dirs, i))' в цикле над 'list_of_dirs', я все равно получаю одну строку. – CiaranWelsh

+0

@ user3059024 Извините, я забыл эту часть. Отредактировано –

+0

Другим способом, IMHO cleaner, является использование 'fullfile'. 'all_project_dirs = fullfile (project_dirs, all_project_dirs);' –

Смежные вопросы