2013-10-10 3 views
2

Удаление каталога в Win32 API (RemoveDirectory) требует удаления всех файлов под этой папкой перед удалением папки. Предположим, что у меня есть папка «foo» в корне, с файлами в ней, а также с некоторыми подпапками, которые также могут иметь или не иметь файлы, как я рекурсивно удаляю все файлы, а затем подпапки?Как удалить файлы из папок и подпапок перед удалением самих подпапок в Win32?

ответ

7

Обычно требуется рекурсивная функция, которая считывает содержимое каталога, который вы хотите удалить (через FindFirstFile()/FindNextFile()) - если файл встречается, удалите его, иначе перезапишите его в папку и затем удалите папку, если рекурсия возвращается.

Или вы можете просто использовать IFileOperation, и система сделает всю работу за вас.

+0

Спасибо, Джонатан, не могли бы вы поделиться образцом кода с интерфейсом IFileOperation? На странице MSDN этого нет. – Freakishly

+0

Полный образец, демонстрирующий расширение IFileOperation, включен в комплект разработки программного обеспечения Windows (SDK). При установке по умолчанию его можно найти в папке% ProgramFiles% \ Microsoft SDK \ Windows \ v6.0 \ Samples \ WinUI \ Shell \ AppPlatform \ FileOperations. –

+0

Обратите внимание, что вы также можете использовать 'SHFileOperation()', который проще в использовании, хотя и не такой гибкий (и в наши дни он более или менее устарел). –

Смежные вопросы