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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QZipReader, не работается ExtractAll()  (Прочитано 5505 раз)
wester
Гость
« : Июль 08, 2012, 15:41 »

Доброго времени суток.
Начал работать с QZipReader\Writer. Файлы успешно архивируются, но распаковать их программно с помощью QZipReader не получается.
Код для распаковки
Код
C++ (Qt)
QZipReader zip("enc.zip");
qDebug()<<zip.exists(); // true
qDebug()<<zip.count(); // 28
qDebug()<<zip.extractAll("dir"); // false

http://www.prog.org.ru/topic_9026_0.html наткнулся поиском на такую же проблему, только предложенный вариант не работает. У меня свойство isDir все время равно 0, и папка не может создаться предварительно.
win qt4.8.1
« Последнее редактирование: Июль 08, 2012, 16:52 от wester » Записан
wester
Гость
« Ответ #1 : Июль 08, 2012, 16:48 »

Код:
QStringList createdFolders;
    QZipReader unzip("enc.zip", QIODevice::ReadOnly);
    QList<QZipReader::FileInfo> allFiles = unzip.fileInfoList();
    QRegExp rx("(.+)/(?!=[\\w.]+)",Qt::CaseInsensitive,QRegExp::RegExp2);
    QDir eDir;
        for(int i=0;i<allFiles.length();++i)
        {
            rx.indexIn(allFiles.at(i).filePath);
            QString captured = rx.cap(1);

            if(!createdFolders.contains(captured))
            {
                eDir.mkpath(captured);
                qDebug()<<captured;
                createdFolders.append(captured);
            }

            QByteArray ar= unzip.fileData(allFiles.at(i).filePath);
            QFile file(allFiles.at(i).filePath);
            file.open(QIODevice::WriteOnly);
            file.write(ar);
            file.close();

        }
        unzip.close();
Реализовал такое. Может есть более лучший способ извлечения из архива? Ибо это велосипед с ромбовидными колесами
« Последнее редактирование: Июль 08, 2012, 16:53 от wester » Записан
andrew.k
Гость
« Ответ #2 : Июль 08, 2012, 17:14 »

quazip
Записан
wester
Гость
« Ответ #3 : Июль 08, 2012, 18:07 »

Хочется меньше зависимостей от сторонних либ. Так что не подходит. К тому же QZipReader\QZipWriter полностью устраивает, кроме распаковки архива. Неужели никто не работал с этими классами ?
Записан
andrew.k
Гость
« Ответ #4 : Июль 09, 2012, 09:41 »

Хочется меньше зависимостей от сторонних либ. Так что не подходит. К тому же QZipReader\QZipWriter полностью устраивает, кроме распаковки архива. Неужели никто не работал с этими классами ?
Работал, все распаковывалось.
Quazip доступен в исходниках, добавь в проект, не будет зависимостей.
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #5 : Июль 09, 2012, 10:26 »

Во первых вроде как в zip.extractAll("dir"); вместо  dir должен быть полный путь к каталогу распаковки, хотя если у тебя псевдокод то это снимается ))) Перед zip.extractAll() проверь существование dir возможно его нет, а создавать сам он не будет.
Записан
Странник
Гость
« Ответ #6 : Июль 09, 2012, 10:40 »

у меня еще забавнее: extractAll() возвращает true, но все равно не распаковывает.
Записан
wester
Гость
« Ответ #7 : Июль 10, 2012, 09:22 »

Вообщем надоел этот секс с QZipWriter\ QZipReader. Собрал QuaZip. Им и буду пользоваться.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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