Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: wester от Июль 08, 2012, 15:41



Название: QZipReader, не работается ExtractAll()
Отправлено: 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


Название: Re: QZipReader, не работается ExtractAll()
Отправлено: wester от Июль 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();
Реализовал такое. Может есть более лучший способ извлечения из архива? Ибо это велосипед с ромбовидными колесами


Название: Re: QZipReader, не работается ExtractAll()
Отправлено: andrew.k от Июль 08, 2012, 17:14
quazip


Название: Re: QZipReader, не работается ExtractAll()
Отправлено: wester от Июль 08, 2012, 18:07
Хочется меньше зависимостей от сторонних либ. Так что не подходит. К тому же QZipReader\QZipWriter полностью устраивает, кроме распаковки архива. Неужели никто не работал с этими классами ?


Название: Re: QZipReader, не работается ExtractAll()
Отправлено: andrew.k от Июль 09, 2012, 09:41
Хочется меньше зависимостей от сторонних либ. Так что не подходит. К тому же QZipReader\QZipWriter полностью устраивает, кроме распаковки архива. Неужели никто не работал с этими классами ?
Работал, все распаковывалось.
Quazip доступен в исходниках, добавь в проект, не будет зависимостей.


Название: Re: QZipReader, не работается ExtractAll()
Отправлено: ecspertiza от Июль 09, 2012, 10:26
Во первых вроде как в zip.extractAll("dir"); вместо  dir должен быть полный путь к каталогу распаковки, хотя если у тебя псевдокод то это снимается ))) Перед zip.extractAll() проверь существование dir возможно его нет, а создавать сам он не будет.


Название: Re: QZipReader, не работается ExtractAll()
Отправлено: Странник от Июль 09, 2012, 10:40
у меня еще забавнее: extractAll() возвращает true, но все равно не распаковывает.


Название: Re: QZipReader, не работается ExtractAll()
Отправлено: wester от Июль 10, 2012, 09:22
Вообщем надоел этот секс с QZipWriter\ QZipReader. Собрал QuaZip. Им и буду пользоваться.