Как избежать удаления каталога на remove_all с библиотеками Boost?

Я использую операцию boost::filesystem::remove_all для удаления содержимого каталога.

Он правильно удаляет содержимое, но, как указано в документации Boost Filesystem, он также удаляет сам каталог.

Есть ли простой способ остаться в каталоге, несмотря на то, что он пуст?


person Santiago Agüero    schedule 30.01.2013    source источник
comment
Вы также можете напрямую создать каталог после remove_all   -  person RvdK    schedule 30.01.2013
comment
Я думаю, что одним из способов может быть повторение содержимого папки и удаление каждого файла.   -  person Santiago Agüero    schedule 30.01.2013
comment
RvdK, вы правы, это решение, которое я использую прямо сейчас... Мне просто интересно, почему Boost People не включил какой-то флаг, чтобы избежать удаления каталога при операции remove_all...   -  person Santiago Agüero    schedule 30.01.2013


Ответы (1)


Я думаю, что лучший способ — выполнить итерацию внутри папки и выполнить remove_all для каждого элемента. Пример кода:

  namespace fs=boost::filesystem;
  fs::path path_to_remove("C:\\DirectoryToRemove");
  for (fs::directory_iterator end_dir_it, it(path_to_remove); it!=end_dir_it; ++it) {
    fs::remove_all(it->path());
  }
person J. Calleja    schedule 30.01.2013
comment
Есть ли у вас гарантия, что удаление файлов из каталога не сделает итератор недействительным? - person Brice M. Dempsey; 07.12.2016
comment
@BriceM.Dempsey В документации не указано, что итератор становится недействительным, когда элемент, на который он ссылается, удаляется. Я нашел эту информацию, которая указывает на то, что повторение удаления контента кажется официально поддерживаемым вариантом использования. Обратите внимание, что любой файл может быть удален извне в любое время, поэтому было бы очень опасно делать недействительными итераторы только по этой причине. - person J. Calleja; 07.12.2016