Функция QFile::remove() при попытке удалить такой файл возвращает false. Чтобы этого избежать нужно выставлять права для таких файлов. В Qt для этого есть функция
bool QFile::setPermissions ( const QString & fileName, Permissions permissions ) [static]
Таким образом окончательный вид функции удаления каталога имеет вид:
//Функция удаления папки
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::setPermissions(entryAbsPath, QFile::ReadOwner | QFile::WriteOwner);
QFile::remove(entryAbsPath);
}
//Для папок делаем рекурсивный вызов
foreach (QString entry, lstDirs)
{
QString entryAbsPath = dir.absolutePath() + "/" + entry;
QDir dr(entryAbsPath);
removeFolder(dr);
}
//Удаляем обрабатываемую папку
if (!QDir().rmdir(dir.absolutePath()))
{
res = 1;
}
return res;
}
* This source code was highlighted with Source Code Highlighter.
Спасибо большое! помогло. респект ;)
ОтветитьУдалитьСовсем забыл об этой особенности файловой системы. Спасибо.
ОтветитьУдалитьНе удаляет скрытые файлы
ОтветитьУдалитьДумаю стоит разделить функционал этой функции на две части. Или опционально параметром передавать флаг - нужно удалять такие файлы или нет. Если они read-olny, на то может быть причина :)
ОтветитьУдалить