Russian Qt Forum

Qt => Общие вопросы => Тема начата: Lagovas от Август 07, 2011, 01:25



Название: Проблема с удалением папки с помощью QDir
Отправлено: Lagovas от Август 07, 2011, 01:25
В общем нужно было удаление папок, и возникла трабла, папки не удаляются. Если папка только созданная, она удачно удаляется. Если в папке были файлы, они удалены и папка пуста, оно не удаляет, типа она занята. Операционка Win7 professional. Пробовал через консоль, для проверки, если там просто писать rmdir, то тоже жалуется. Но там все решается ключами (их там всего 2). А как решить здесь, что бы с помощью Qt и кроссплатформенно, или здесь все же нужно подключать boost::filesystem, ибо с ним все тип-топ.


Название: Re: Проблема с удалением папки с помощью QDir
Отправлено: ритт от Август 07, 2011, 02:12
http://doc.trolltech.com/latest/qdir.html#rmpath


Название: Re: Проблема с удалением папки с помощью QDir
Отправлено: Lagovas от Август 07, 2011, 10:49
пробовал, не помогает. Только что закинул в папку другую папку с файлами, удалил эти файлы и попробовал ее удалить. Нефига. Вот код:

Код:
#include <QDir>

using namespace std;
int main(int argc, char *argv[])
{

    QString path="C:/Users/Lagovas/Desktop/545_naruto-silver.ucoz.kz/546 naruto-silver.ucoz.kz/546 naruto-silver.ucoz.kz";
    QDir(path).rmpath(path)
            ? cout<<"success"
            : cout<<"error";
    getwchar();
}


Название: Re: Проблема с удалением папки с помощью QDir
Отправлено: LisandreL от Август 07, 2011, 10:58
Думаю так:
QDir("C:/Users/Lagovas/Desktop").rmpath("545_naruto-silver.ucoz.kz/546 naruto-silver.ucoz.kz/546 naruto-silver.ucoz.kz");


Название: Re: Проблема с удалением папки с помощью QDir
Отправлено: Lagovas от Август 12, 2011, 06:25
Нет, не пашет. Вы сами пробовали?
Помогите плз, прога почти готова, не могу доделать удаление каких то папок. Я рекурсивно сначала файлы удаляю, а потом уже папки в конце рекурсии, т.е. удаляю их с самой глубины до начала. И они не удаляются ни rmdir, ни rmpath. Хотя когда запустил релизную версию программы, она падла все удалила, когда не надо было (случайно код забыл закоментить). А вот при тесте под дебагом, нифига. Сейчас релизную не тестил.


Название: Re: Проблема с удалением папки с помощью QDir
Отправлено: Пантер от Август 12, 2011, 07:17
Lagovaz, код покажи.


Название: Re: Проблема с удалением папки с помощью QDir
Отправлено: Lagovas от Август 12, 2011, 07:32
Код:
void NarutoMove::removeSource(QString path)
{
    QMessageBox::about(this,"Try remove","remove");//for debug
    QFileInfo fi(path);
    if(fi.isFile())//если файл, удаляем и выходим
    {
        logTextEdit->append("remove "+path);
        QFile::remove(path);
        return;
    }

    QStringList sl = QDir(path).entryList();
    logTextEdit->append(sl.join("\n"));//for debug
    foreach(QString name,sl)
    {
        if(name==".." || name==".")//знаю, знаю. потом допишу NoDotAndDotDot
        {
            continue;
        }
        //если папка, то запускаем метод для нее
        if(QFileInfo(path+"/"+name).isDir())//методом експериментов, лучше вручную писать path+'/'+name чем QFileInfo, в каком то случае плохо работало
        {
            logTextEdit->append("Go to "+path+"/"+name);
            removeSource(path+"/"+name);
            continue;
        }
        if(QFileInfo(path+"/"+name).isFile())//если файл, удаляем
        {
            logTextEdit->append("remove "+path+"/"+name);
            QFile::remove(path+"/"+name);
            continue;
        }
    }
    logTextEdit->append("Try remove dir "+path);
    //под конец удаляем папку. обычно удаляю rmdir, но тут решил попробовать 2 сразу, нифига
    QDir(path).rmdir(path)
            ? logTextEdit->append("Dir removed")
            : logTextEdit->append("Cant remove dir");
    QDir(path).rmpath(path)
            ? logTextEdit->append("Dir removed")
            : logTextEdit->append("Cant remove dir");
}


Название: Re: Проблема с удалением папки с помощью QDir
Отправлено: Пантер от Август 12, 2011, 07:38
Все верно. Попробуй QDir().rmdir(path).


Название: Re: Проблема с удалением папки с помощью QDir
Отправлено: Lagovas от Август 12, 2011, 07:53
Неа, не хочет. Хотя все файлы удаляет и папки пусты.
П.С. админ, нельзя ли добавить форму быстрого ответа на странице просмотра ответов, что бы не надо было грузить новую страницу для ответа? Хотя бы просто поля для сообщения и кнопки отправить, без бб кодов? Это просто пожелание.


Название: Re: Проблема с удалением папки с помощью QDir
Отправлено: Пантер от Август 12, 2011, 08:50
П.С. админ, нельзя ли добавить форму быстрого ответа на странице просмотра ответов, что бы не надо было грузить новую страницу для ответа? Хотя бы просто поля для сообщения и кнопки отправить, без бб кодов? Это просто пожелание.
Она есть. В настройках поищи.
Неа, не хочет. Хотя все файлы удаляет и папки пусты.
Каталоги точно пусты? Может там какие-то системные или скрытые файлы?


Название: Re: Проблема с удалением папки с помощью QDir
Отправлено: Lagovas от Август 12, 2011, 08:56
забыл про скрытые, да. У меня постоянно в каждой папке создается thumb.db. Подскажите как удалить такое.


Название: Re: Проблема с удалением папки с помощью QDir
Отправлено: Пантер от Август 12, 2011, 08:58
забыл про скрытые, да. У меня постоянно в каждой папке создается thumb.db. Подскажите как удалить такое.
Посмотри параметры фильтра в entryList.

П.С. вот убогая вещь - винда. Ну нафига создавать кэш (thumb.db) в каждом каталоге с картинками? Ну неужели нельзя как в Линухе все в одном месте хранить???


Название: Re: Проблема с удалением папки с помощью QDir
Отправлено: Lagovas от Август 12, 2011, 09:35
спасибо, теперь все получилось. Кстати вопрос, фильтры задаются таким образом: QDir::Dirs | QDir::Hidden | QDir::Files.
Вопрос, почему одинарный |, вроде ведь двойной надо или неважно? И почему "Или", а не "И" нужно использовать?
П.С. Настроил, все ок, теперь форма быстрого ответа есть.
П.С. Может это и разумно хеш в папке хранить, при удалении папки с изображениями, удаляется хеш, иначе хеш будет оставаться. Или что бы при удалении файлов или папки шерстился весь кеш. Но что производительнее будет, это уже спорно. Хотя может все и не так реализовывается.


Название: Re: Проблема с удалением папки с помощью QDir
Отправлено: Пантер от Август 12, 2011, 09:42
Вопрос, почему одинарный |, вроде ведь двойной надо или неважно? И почему "Или", а не "И" нужно использовать?
Читай (http://doc.qt.nokia.com/4.7-snapshot/qflags.html)