Информация об изменениях

Сообщение Re[2]: как пользоваться std::filesystem::directory_iterator? от 05.09.2023 14:33

Изменено 05.09.2023 14:35 B0FEE664

Re[2]: как пользоваться std::filesystem::directory_iterator?
Здравствуйте, DiPaolo, Вы писали:

DP>Зависит от логики приложения. Первое, что приходит на ум, и самое простое — начинать итерирование заново. Но если у вас ваш второй процесс очень часто удаляет/добавляет файлы, то нужно как-то иначе организовать обработку.

Если мне просто нужно получить список файлов и не страшно, что он через секунду устареет, тогда как быть?

DP>https://en.cppreference.com/w/cpp/filesystem/directory_iterator:

DP>

DP>If a file or a directory is deleted or added to the directory tree after the directory iterator has been created, it is unspecified whether the change would be observed through the iterator.

— это понятно — нет способа гарантировать что проход будет только по существующим файлам, но это не значит, что при проходе по списку итератором должна возникать ошибка.
Допустим у нас есть итератор на файл и этот файл кто-то удаляет, значит it->exists() вернёт false, а ++it передвинет итератор на следующий файл. Или же ++it бросит исключение?
Re[2]: как пользоваться std::filesystem::directory_iterator?
Здравствуйте, DiPaolo, Вы писали:

DP>Зависит от логики приложения. Первое, что приходит на ум, и самое простое — начинать итерирование заново. Но если у вас ваш второй процесс очень часто удаляет/добавляет файлы, то нужно как-то иначе организовать обработку.

Если мне просто нужно получить список файлов и не страшно, что он через секунду устареет, тогда как быть?

DP>https://en.cppreference.com/w/cpp/filesystem/directory_iterator:

DP>

DP>If a file or a directory is deleted or added to the directory tree after the directory iterator has been created, it is unspecified whether the change would be observed through the iterator.

— это понятно — нет способа гарантировать что проход будет только по существующим файлам, но это не значит, что при проходе по списку итератором должна возникать ошибка.
Допустим у нас есть итератор на файл и этот файл кто-то удаляетудалил, значит it->exists() вернёт false, а ++it передвинет итератор на следующий файл. Или же ++it бросит исключение?