Исключение std :: filesystem :: recursive_directory_iterator - PullRequest
0 голосов
/ 13 сентября 2018

Следующая функция:

void foo(const std::string& dir)
{
    for (auto& el : std::filesystem::recursive_directory_iterator(dir)) {
            std::cout << el.path() << '\n';
    }
}

при использовании в:

int main()
{
    std::string p = "C:\\";
    foo(p);
}

вызывает исключение при достижении определенной папки (я полагаю) в Windows 10. Код компилируетсяна VS 2017 с поддержкой C ++ 17.Сообщение об исключении:

recursive_directory_iterator::operator++: The system cannot find the path specified.

То же происходит и при использовании std::filesystem::directory_iterator.Почему возникает исключение для этой конкретной папки?

1 Ответ

0 голосов
/ 16 ноября 2018

Очевидно, возникает исключение, когда ОС отказывает в разрешении на доступ к одной из папок.

Обходной путь должен использовать соответствующий рекурсивный итератор каталога перегрузка конструктора (4-й) и предоставить параметр skip_permission_denied:

for (auto& el : std::filesystem::recursive_directory_iterator(dir, std::filesystem::directory_options::skip_permission_denied)) {
    std::cout << el.path() << '\n';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...