В коде - удаление папки с файлами - PullRequest
0 голосов
/ 16 февраля 2012

Я пытаюсь написать код, который удалит папку, в которой есть файлы. Я попробовал несколько способов, и каждый раз получаю одну и ту же проблему. Я удаляю файлы в папке и папка вроде бы нормально. Но, похоже, какая-то ссылка на папку все еще существует.

Я перехожу к своему коду и добираюсь до функций удаления, и они, кажется, проходят нормально. Затем я захожу в Windows Explorer и пытаюсь получить доступ к папке, которую я только что удалил. Он все еще там, хотя код говорит, что он удалил его, но когда я нажимаю на него, он говорит «Доступ запрещен». Один из методов, которые я попробовал, действительно удалил папку из проводника Windows, но когда я пытаюсь создать папку с тем же именем и местоположением, я получаю сообщение об ошибке, и из GetLastError выдается E_ACCESSDENIED.

Так что я должен сделать, чтобы правильно удалить папку?

Один метод, который я использовал, использовал SHFileOperation. Другим было использовать FindFirstData и удалить все файлы, а затем использовать RemoveDirectory для удаления пустой папки. Оба привели меня к этой проблеме отказа в доступе.

РЕДАКТИРОВАТЬ: Вот моя операция SHFile. https://stackoverflow.com/questions/9291995/cant-get-shfileoperation-to-delete-a-directory-with-more-than-one-file

Ответы [ 3 ]

1 голос
/ 05 февраля 2013

Вы можете использовать

system ( "RD /S /Q [path] " );

работает хорошо, но удаляет все в папке навсегда. Поэтому сделайте резервную копию, прежде чем использовать его !!

1 голос
/ 16 февраля 2012

Вы можете использовать Boost.FileSystem .

В вашем случае это будет

boost::filesystem::remove_all(yourPath)

Это удалит все файлы в пути. Тогда используйте:

RemoveDirectory( LPCTSTR lpPathName );    // Windows only
0 голосов
/ 24 декабря 2013

Ознакомьтесь с remove_folder(), который я написал на C ++ здесь , на который я ответил на вопрос, аналогичный вашему. Он не использует сторонние библиотеки, такие как boost.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...