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