пятница, 30 октября 2009 г.

Рекурсивное удаление каталогов в Qt

Удаляем рекурсивно папки.

//Функция удаления папки
int removeFolder(QDir & dir)
{


int
res = 0;
//Получаем список каталогов
QStringList lstDirs = dir.entryList(QDir::Dirs |

QDir::AllDirs |
QDir::NoDotAndDotDot);
//Получаем список файлов
QStringList lstFiles = dir.entryList(QDir::Files);

//Удаляем файлы
foreach (QString entry, lstFiles)
{

QString entryAbsPath = dir.absolutePath() + "/" + entry;

QFile::remove(entryAbsPath);
}


//Для папок делаем рекурсивный вызов
foreach (QString entry, lstDirs)
{


QString entryAbsPath = dir.absolutePath() + "/" + entry;

removeFolder(QDir(entryAbsPath));
}


//Удаляем обрабатываемую папку
if (!QDir().rmdir(dir.absolutePath()))
{


res = 1;
}

return
res;
}

1 комментарий:

  1. Хочется внести небольшое замечание. В случае, если файлы имеют флаг read-only для удаления их через QFile::remove() потребуется проставить флаги при помощи QFile::setPermission()

    QFile::setPermissions( entryAbsPath, QFile::WriteOwner|QFile::WriteUser|QFile::WriteGroup|QFile::WriteOther );

    ОтветитьУдалить