Russian Qt Forum
Сентябрь 30, 2024, 22:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с удалением папки с помощью QDir  (Прочитано 7548 раз)
Lagovas
Гость
« : Август 07, 2011, 01:25 »

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

http://doc.trolltech.com/latest/qdir.html#rmpath
Записан
Lagovas
Гость
« Ответ #2 : Август 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();
}
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #3 : Август 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");
Записан
Lagovas
Гость
« Ответ #4 : Август 12, 2011, 06:25 »

Нет, не пашет. Вы сами пробовали?
Помогите плз, прога почти готова, не могу доделать удаление каких то папок. Я рекурсивно сначала файлы удаляю, а потом уже папки в конце рекурсии, т.е. удаляю их с самой глубины до начала. И они не удаляются ни rmdir, ни rmpath. Хотя когда запустил релизную версию программы, она падла все удалила, когда не надо было (случайно код забыл закоментить). А вот при тесте под дебагом, нифига. Сейчас релизную не тестил.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Август 12, 2011, 07:17 »

Lagovaz, код покажи.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Lagovas
Гость
« Ответ #6 : Август 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");
}
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Август 12, 2011, 07:38 »

Все верно. Попробуй QDir().rmdir(path).
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Lagovas
Гость
« Ответ #8 : Август 12, 2011, 07:53 »

Неа, не хочет. Хотя все файлы удаляет и папки пусты.
П.С. админ, нельзя ли добавить форму быстрого ответа на странице просмотра ответов, что бы не надо было грузить новую страницу для ответа? Хотя бы просто поля для сообщения и кнопки отправить, без бб кодов? Это просто пожелание.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Август 12, 2011, 08:50 »

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

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Lagovas
Гость
« Ответ #10 : Август 12, 2011, 08:56 »

забыл про скрытые, да. У меня постоянно в каждой папке создается thumb.db. Подскажите как удалить такое.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Август 12, 2011, 08:58 »

забыл про скрытые, да. У меня постоянно в каждой папке создается thumb.db. Подскажите как удалить такое.
Посмотри параметры фильтра в entryList.

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

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Lagovas
Гость
« Ответ #12 : Август 12, 2011, 09:35 »

спасибо, теперь все получилось. Кстати вопрос, фильтры задаются таким образом: QDir::Dirs | QDir::Hidden | QDir::Files.
Вопрос, почему одинарный |, вроде ведь двойной надо или неважно? И почему "Или", а не "И" нужно использовать?
П.С. Настроил, все ок, теперь форма быстрого ответа есть.
П.С. Может это и разумно хеш в папке хранить, при удалении папки с изображениями, удаляется хеш, иначе хеш будет оставаться. Или что бы при удалении файлов или папки шерстился весь кеш. Но что производительнее будет, это уже спорно. Хотя может все и не так реализовывается.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #13 : Август 12, 2011, 09:42 »

Вопрос, почему одинарный |, вроде ведь двойной надо или неважно? И почему "Или", а не "И" нужно использовать?
Читай
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.089 секунд. Запросов: 23.