Мне нужно удалить все файлы в каталоге с помощью Qt.
Все файлы в каталоге будут иметь расширение ".txt".
Я не хочу удалять сам каталог.
Кто-нибудь знает, как я могу это сделать? Я посмотрел на QDir, но мне не повезло.
Мне нужно удалить все файлы в каталоге с помощью Qt.
Все файлы в каталоге будут иметь расширение ".txt".
Я не хочу удалять сам каталог.
Кто-нибудь знает, как я могу это сделать? Я посмотрел на QDir, но мне не повезло.
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);
}
Игнорирование фильтрации расширений 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() в каталоге, который хотите очистить (что полностью удалит его). Затем заново создайте его с тем же именем... Эффект будет таким же, но с меньшим количеством строк кода. Однако эта более подробная функция предоставляет больше возможностей для детальной обработки исключений, если это необходимо, например, обнаружение нарушений доступа к определенным файлам/папкам...
Вызвать QDir:: entryList (QDir:: Files), чтобы получить список всех файлов в каталоге, а затем для каждого имени файла, который заканчивается на ".txt", вызовите QDir:: remove (fileName), чтобы удалить файл.
Вы начали в хорошем смысле, посмотрите entryList и, конечно же, передайте имя фильтра, который вы хотите.
Вот как я это сделаю:
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());
}
Вы можете добиться этого, не используя Qt: для этого, opendir, readdir, unlink и даже rmdir станут вашими друзьями. Он прост в использовании, просто просмотрите страницы руководства;).