Получить папку списка и файл списка в корневой папке dirent.h в C ++

У меня есть корневая папка

+ Test1(folder) > Test2(folder)>Test3(folder)>file1,file2....(file) 
+ Test5(folder) > Test6(folder)>file1,file2....(file)

How to get list file with input is root folder in C++. I got list files successfully if list files(file1,file2....) is children root folder(root folder>file1,file2...). But in my case, to get list files I must scan many parent folders. How to get list file in my case? This is my code to get list file if don't have parent folder

    DIR *dirStr = NULL; 
    dirStr = opendir(rootpath)
    dirent *nextFile = NULL;
    while ((nextFile = readdir(dirStr))!=NULL)
    {
       //Avoid hidden files
        //Scan all file an dictionary
        if (nextFile->d_name[0] != '.')
        {
                    cout<d_name<
2
nl ja de
добавлено автор Grijesh Chauhan, источник
На платформах POSIX может быть опция fts (3) .
добавлено автор Fred Foo, источник

1 ответы

Вы бы использовали рекурсию.

Рекурсивные функции - это функции, которые называют себя. Существуют также взаимно рекурсивные функции, которые вызывают другую функцию, которая в свою очередь снова вызывает вызывающую функцию.

Стильный пример рекурсии - это наивная факторная функция:

int factorial(int x) {
    if (x == 1) return 1;//assume 1
    else if (x > 1) return x*factorial(x-1);
    else throw std::logic_error("factorial called with argument<1");
}
3
добавлено
@ user2039786: Когда вы читаете «.», то наверняка вы также читаете «..» где-то?
добавлено автор Sebastian Mach, источник
@ sim642: Почему бы не предложить отредактировать? Однако, спасибо за уведомление.
добавлено автор Sebastian Mach, источник
@ user2039786 Честно говоря, «я тоже не знаю, как родительскую папку», но вам предоставляется начальная папка, и вам понадобится ее для создания ваших подпапок полными или относительными именами. Наконец, как только вы его почти заработаете, помните, что структура dirent * может (и будет) перезаписываться с каждым последующим вызовом в любом цикле, поэтому приготовьтесь делать копии, если вы намерены хранить эти имена файлов вокруг.
добавлено автор WhozCraig, источник
факультет? Это называется факториалом.
добавлено автор sim642, источник
Сожалею. В вашем коде вы знаете параметр глубины. Но в моем случае я не знаю, как создать родительскую папку, поэтому я не могу узнать параметр глубины?
добавлено автор user2039786, источник
Спасибо. И у меня есть другой вопрос, который связан с моим вышеупомянутым вопросом. У меня есть функция (функция A) со входом, это файлы списков, чтобы что-то сделать. И у меня есть две папки (то же самое в вышеупомянутом вопросе). И я хочу вызвать функцию со списком файлов. И выходной файл будет возвращен в той же папке с входным файлом. Как это сделать?
добавлено автор user2039786, источник
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest