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.



#include <QString>

class FileUtils
    static bool removeDir(const QString &dirName);

#endif // FILEUTILS_H


#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;