Да, обычно вы должны сначала удалить содержимое.Если вы не хотите использовать Boost для этого, вы в значительной степени застряли в написании непереносимого кода для поиска всех файлов (например, FindFirstFile
, FindNextFile
в Windows, opendir
, readdir
вUnix и аналогичные) рекурсивно, и удалите все из них.
В Windows вы также можете использовать ShFileOperation
или IFileOperation интерфейс .Они могут обрабатывать рекурсивное удаление внутри, поэтому вы просто даете ему имя каталога, который хотите удалить, и он обрабатывает все остальное.
Как и в большинстве случаев с COM, интерфейс IFileOperation
, кажется, разработан специальнобыть настолько неуклюжим, насколько это возможно (например, IFileOperation::DeleteItem
на самом деле ничего не удаляет - он просто добавляет элемент в список вещей, которые нужно удалить. Затем вам нужно вызвать IFileOperation::PerformOperations
, чтобы выполнить фактическое удаление.