Подтвердить что ты не робот

Удалить все файлы в каталоге

Мне нужно удалить все файлы в каталоге с помощью Qt.

Все файлы в каталоге будут иметь расширение ".txt".

Я не хочу удалять сам каталог.

Кто-нибудь знает, как я могу это сделать? Я посмотрел на QDir, но мне не повезло.

4b9b3361

Ответ 1

Bjorns Отвечать tweeked to not loop forever

QString path = "whatever";
QDir dir(path);
dir.setNameFilters(QStringList() << "*.*");
dir.setFilter(QDir::Files);
foreach(QString dirFile, dir.entryList())
{
    dir.remove(dirFile);
}

Ответ 2

Игнорирование фильтрации расширений txt... Здесь можно удалить все в папке, включая непустые вспомогательные каталоги:

В QT5 вы можете использовать removeRecursively() на dirs. К сожалению, это удаляет весь каталог, а не просто его опустошает. Вот базовая функция, позволяющая просто очистить содержимое каталога.

void clearDir( const QString path )
{
    QDir dir( path );

    dir.setFilter( QDir::NoDotAndDotDot | QDir::Files );
    foreach( QString dirItem, dir.entryList() )
        dir.remove( dirItem );

    dir.setFilter( QDir::NoDotAndDotDot | QDir::Dirs );
    foreach( QString dirItem, dir.entryList() )
    {
        QDir subDir( dir.absoluteFilePath( dirItem ) );
        subDir.removeRecursively();
    }
}

В качестве альтернативы вы можете использовать removeRecursively() в каталоге, который хотите очистить (что полностью удалит его). Затем заново создайте его с тем же именем... Эффект будет таким же, но с меньшим количеством строк кода. Однако эта более подробная функция предоставляет больше возможностей для детальной обработки исключений, если это необходимо, например, обнаружение нарушений доступа к определенным файлам/папкам...

Ответ 3

Вызвать QDir:: entryList (QDir:: Files), чтобы получить список всех файлов в каталоге, а затем для каждого имени файла, который заканчивается на ".txt", вызовите QDir:: remove (fileName), чтобы удалить файл.

Ответ 4

Вы начали в хорошем смысле, посмотрите entryList и, конечно же, передайте имя фильтра, который вы хотите.

Ответ 5

Вот как я это сделаю:

QString path = "name-of-directory";
QDir dir(path);
dir.setNameFilters(QStringList() << "*.txt");
dir.setFilters(QDir::Files);
while(dir.entryList().size() > 0){
    dir.remove(dir.entryList().first());
}

Ответ 6

Вы можете добиться этого, не используя Qt: для этого, opendir, readdir, unlink и даже rmdir станут вашими друзьями. Он прост в использовании, просто просмотрите страницы руководства;).