When dealing with directories, Qt has a large number of functions to make manipulating them easy. However, it does not include a way to delete a non-empty directory. This little omission is easily solved.
Following is a recursive function that will delete a directory along with all
of it’s contents. This will delete depth first. Meaning it will recurse into
sub-directories and only start deleting once the directory has no
sub-directories. Changing QDir::DirsFirst
to QDir::DirsLast
will change this
into a breadth first search.
fileutils.h
#ifndef FILEUTILS_H
#define FILEUTILS_H
#include <QString>
class FileUtils
{
public:
static bool removeDir(const QString &dirName);
};
#endif // FILEUTILS_H
fileutils.cpp
#include <QDir>
#include <QFile>
#include <QFileInfo>
#include <QFileInfoList>
#include "fileutils.h"
/*!
Delete a directory along with all of its contents.
param dirName Path of directory to remove.
return true on success; false on error.
*/
bool FileUtils::removeDir(const QString &dirName)
{
bool result = true;
QDir dir(dirName);
if (dir.exists(dirName)) {
Q_FOREACH(QFileInfo info, dir.entryInfoList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::AllDirs | QDir::Files, QDir::DirsFirst)) {
if (info.isDir()) {
result = removeDir(info.absoluteFilePath());
}
else {
result = QFile::remove(info.absoluteFilePath());
}
if (!result) {
return result;
}
}
result = dir.rmdir(dirName);
}
return result;
}