возникли проблемы при входе в подкаталоги

Ознакомиться с <filesystem>Я написал простую рекурсивную функцию, которая обходит дерево каталогов:

#include <filesystem>

namespace fs = std::tr2::sys;
const fs::directory_iterator fs_end;

void walk(fs::path root)
{
std::cout << "ENTERING " << root << '\n';
for (auto it = fs::directory_iterator(root); it != fs_end; ++it)
{
if (is_directory(it->status()))
{
walk(it->path());
}
else
{
std::cout << it->path() << " is not a directory\n";
}
}
std::cout << "LEAVING " << root << '\n';
}

int main()
{
walk("d:/a");
}

К сожалению, это будет посещать только непосредственные каталоги внутри каталога, указанного в main, Подкаталоги не посещаются. Чтобы проиллюстрировать это, я сделал очень простую структуру каталогов:

ABCD

Вывод программы следующий:

ENTERING d:/a
ENTERING b
LEAVING b
ENTERING c
LEAVING c
LEAVING d:/a

Как видите, d не посещается. По-видимому, цикл for выполняется ноль раз внутри c. Зачем?

0

Решение

Из вывода это выглядит так it->path() дает вам относительный путь, а не абсолютный путь. Итерируя, ваш Текущий каталог не изменяется, поэтому попытка перебрать каталог с путем ‘b’ или ‘c’ не будет работать, и в этом несуществующем каталоге не будет найдено никаких подкаталогов. В цикле for попробуйте следующий рекурсивный вызов:

walk(root/it->path());

Теперь, когда ваша программа проверяет каталог c, она должна вывести:

ENTERING d:/a/c
ENTERING d:/a/c/d
etc...
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector