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

Сообщение как пользоваться std::filesystem::directory_iterator? от 05.09.2023 13:37

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

как пользоваться std::filesystem::directory_iterator?
На данный момент я пользуюсь std::experimental::filesystem::directory_iterator из gcc под Debian.
В <experimental/filesystem> есть такой define:
#define __cpp_lib_experimental_filesystem 201406
(если это важно)

При использовании fs::directory_iterator::increment на каталоге, в котором вторая нить (ну или другой процесс) создаёт или удаляет файл, возникает ошибка при инкременте итератора.
Т.е. ++it может бросить исключение.
Соответственно есть желание использовать:
directory_iterator&amp; increment( std::error_code&amp; ec );,
но после некоторого размышления возникли обоснованные сомнения в возможности использовать directory_iterator для таких случаев.

Если один процесс всё время создаёт и удаляет некие файлы в каталоге, а другой пытается просмотреть весь список файлов, то как это сделать?
Допустим вызов it.increment(errCode) вернул ошибку. Что следует предпринять в этом случае? Попытаться вызвать it.increment(errCode) ещё раз? Начать сначала?
И вообще, что должно происходить в таком случае?
Это ошибка в реализации std::experimental::filesystem под Debian для файловой системы ext4?
Если — да, то исправлена ли это ошибка в новых версиях?
Или это не ошибка и так и задумано? Тогда как этим пользоваться?
как пользоваться std::filesystem::directory_iterator?
На данный момент я пользуюсь std::experimental::filesystem::directory_iterator из gcc под Debian.
В <experimental/filesystem> есть такой define:
#define __cpp_lib_experimental_filesystem 201406
(если это важно)

При использовании fs::directory_iterator::increment на каталоге, в котором вторая нить (ну или другой процесс) создаёт или удаляет файл, возникает ошибка при инкременте итератора.
Т.е. ++it может бросить исключение.
Соответственно есть желание использовать:
directory_iterator&amp; increment( std::error_code&amp; ec );,
но после некоторого размышления возникли обоснованные сомнения в возможности использовать directory_iterator для таких случаев.

Если один процесс всё время создаёт и удаляет некие файлы в каталоге, а другой пытается просмотреть весь список файлов, то как это сделать?
Допустим вызов it.increment(errCode) вернул ошибку. Что следует предпринять в этом случае? Попытаться вызвать it.increment(errCode) ещё раз? Начать сначала?
И вообще, что должно происходить в таком случае?
Это ошибка в реализации std::experimental::filesystem под Debian для файловой системы ext4?
Если — да, то исправлена ли это ошибка в новых версиях?
Или это не ошибка и так и задумано? Тогда как этим пользоваться?