Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QZipWriter 
:(
    Опции темы
vlarry
Дата 11.7.2011, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.8.2009

Репутация: нет
Всего: нет



Добрый день! Хочу попросить помощи, вот по какому вопросу...Мне необходимо архивировать файлы с вложенными каталогами...Есть один текстовый файл и папка с рисунками и мне надо получить, н-р:

Код

архив.zip
    |-текстовый файл.txt
    |-рисунки
        |-рисунок1
        |-рисунок2


но пока не получается...Переделал пример, но он не архивирует, как надо...
Для архивирования использую QZipWriter:

Код

int CMainWindow::archiveDir(const QString path)
{
    QZipWriter zip(path + "/dir.zip");

    if (zip.status() != QZipWriter::NoError)
        return -1;

    zip.setCompressionPolicy(QZipWriter::AutoCompress);

    QDirIterator it(path + "/temp/", QDir::Files|QDir::Dirs, QDirIterator::Subdirectories);
    
    while(it.hasNext()) 
    {
        QString file_path = it.next();
        if (it.fileInfo().isDir()) 
        {
            zip.setCreationPermissions(QFile::permissions(file_path));
            zip.addDirectory(file_path.remove(path));
        } 
        else 
            if(it.fileInfo().isFile()) 
            {
                QFile file(file_path);

                if (!file.open(QIODevice::ReadOnly))
                    continue;

                zip.setCreationPermissions(QFile::permissions(file_path));
                QByteArray ba = file.readAll();
                zip.addFile(file_path.remove(path), ba);

                file.close();
            }
    }

    zip.close();

    return 0;
}

PM MAIL   Вверх
borisbn
Дата 12.7.2011, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Может добавить QDir::NoDotAndDotDot в флаги QDirIterator'а, а то у тебя в
Цитата(vlarry @  11.7.2011,  17:30 Найти цитируемый пост)
 zip.addDirectory(file_path.remove(path));

добавляются и . и ..



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
vlarry
Дата 12.7.2011, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.8.2009

Репутация: нет
Всего: нет



я добавил проверку 
Код

if(it.fileName() == "." || it.fileName() == "..")
    continue;


уже все перепробовал, но получается следующее
архив.zip
    |-текстовый файл.txt
    |-рисунки
        |-рисунок1
        |-рисунок2
    |-рисунки(пустой)

Добавлено @ 13:59
обратил внимание, что вторая пустая папка "рисунок" отображается только в far, а в проводнике и в тотале(при откл. ф-ии "показывать скрытые файлы") не отображается...значит он все правильно архивирует?


Это сообщение отредактировал(а) vlarry - 12.7.2011, 14:31
PM MAIL   Вверх
vlarry
Дата 12.7.2011, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.8.2009

Репутация: нет
Всего: нет



попробовал распаковать созданный архив, но компоновщик выдает сообщение:
Код

QtGuid4.lib(QtGuid4.dll) : error LNK2005: "public: __thiscall QZipReader::~QZipReader(void)" (??1QZipReader@@QAE@XZ) уже определен в qzip.obj
QtGuid4.lib(QtGuid4.dll) : error LNK2005: "public: __thiscall QZipReader::QZipReader(class QString const &,class QFlags<enum QIODevice::OpenModeFlag>)" (??0QZipReader@@QAE@ABVQString@@V?$QFlags@W4OpenModeFlag@QIODevice@@@@@Z) уже определен в qzip.obj
   Создается библиотека bin\Level Editor.lib и объект bin\Level Editor.exp
bin\Level Editor.exe : fatal error LNK1169: обнаружен многократно определенный символ - один или более

PM MAIL   Вверх
borisbn
Дата 12.7.2011, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Может ты уже с проектом намудрил...
Я у себя сделал так:
1. Создал новый проект (VC2008)
2. Добавил в пути include'ов:
Цитата

    "$(QTDIR)\src\gui\text";"$(QTDIR)\mkspecs\default";"$(QTDIR)\src\3rdparty\zlib"

3. Добавил в проект файл 
Цитата

C:\Qt\4.6.2\src\gui\text\qzip.cpp

4. Включил в main.cpp
Код

#include <qzipreader_p.h>
#include <qzipwriter_p.h>

и далее в main()
Код

    QZipWriter writer( "file.zip" );
    QZipReader reader( "file.zip" );


всё компилируется и работает.
Ты так же делал ? Если нет - сделай так...



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
vlarry
Дата 12.7.2011, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.8.2009

Репутация: нет
Всего: нет



спасибо, попробую...я только добавлял в проектный файл $(QTDIR)\src\3rdparty\zlib, а qzip.cpp я скопировал в свой проект...

Добавлено через 9 минут и 3 секунды
все сделал, но ошибка та же...непонятно почему qzipwriter работает, а qzipreader не хочет...что может быть не так?
PM MAIL   Вверх
borisbn
Дата 12.7.2011, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(vlarry @  12.7.2011,  15:38 Найти цитируемый пост)
непонятно почему qzipwriter работает, а qzipreader не хочет...что может быть не так?

вообще-то это сразу насторожило... У тебя какая версия Qt ? Какой компилятор ?
У меня 4.6.2 и MSVC 2008. Возможно в твоей версии они что-то поменяли.
Давай так - я выложу "свои" qzip.cpp, qzipreader_p.h и qzipwriter_p.h, а ты "свои"

Добавлено через 8 минут и 8 секунд
Кстати, читал в h-никах ?
Цитата

//  W A R N I N G
//  -------------
//
// This file is not part of the Qt API.  It exists for the convenience
// of the QLibrary class.  This header file may change from
// version to version without notice, or even be removed.
//
// We mean it.


Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  qzip.zip 11,07 Kb


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
vlarry
Дата 12.7.2011, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.8.2009

Репутация: нет
Всего: нет



Qt 4.7.2
IDE Msvс 2008 Express

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  qziparchive.rar 11,16 Kb
PM MAIL   Вверх
borisbn
Дата 12.7.2011, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Всё ясно.
В моей версии qzipwriter_p.h (4.6.2)
Код

...
class Q_AUTOTEST_EXPORT QZipWriter
...

В твоей версии qzipwriter_p.h (4.7.2)
Код

...
class Q_AUTOTEST_EXPORT QZipWriter
...

одинакого.

В моей версии qzipreader_p.h (4.6.2)
Код

...
class Q_AUTOTEST_EXPORT QZipReader
...

В твоей версии qzipreader_p.h (4.7.2)
Код

...
class Q_GUI_EXPORT QZipReader
...


Давай думать, что с этим делать... ( Мне тоже не век на 4.6.2 сидеть smile )



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
borisbn
Дата 12.7.2011, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Эххх, если бы у них reader и writer были в разных cpp-шниках...
Не хочется руками резать qzip.cpp на два и один из них включать в проект, второй - нет...



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
vlarry
Дата 12.7.2011, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.8.2009

Репутация: нет
Всего: нет



к сожалению мои познания не такие глубокие...
а какое различие между макросами Q_AUTOTEST_EXPORT и Q_GUI_EXPORT...

Добавлено через 12 минут и 10 секунд
может и правда разрезать их на отдельные файлы?

PM MAIL   Вверх
borisbn
Дата 12.7.2011, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(vlarry @  12.7.2011,  17:37 Найти цитируемый пост)
к сожалению мои познания не такие глубокие...а какое различие между макросами Q_AUTOTEST_EXPORT и Q_GUI_EXPORT...

Будешь смеяться - понятия не имею, но на 99,9(9) уверен, что дело в этом - мои Qt-шные dll-ки и твои собирались явно по-разному. В принципе, можно поискать эти define'ы в дебрях Qt... Но, думаю, вариант
Цитата(vlarry @  12.7.2011,  17:37 Найти цитируемый пост)
может и правда разрезать их на отдельные файлы?

вполне подойдёт как выход из ситуации.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
vlarry
Дата 12.7.2011, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.8.2009

Репутация: нет
Всего: нет



попробую завтра их порезать, а то забыл на работе пушить на github.com
PM MAIL   Вверх
borisbn
Дата 12.7.2011, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Если всё получится - кинь сюда, плиз, рез-ты + инструкцию по подключению. Думаю не только мне будет полезно

Добавлено @ 20:38
P.S. Подсмотрел на некоторых форумах - там принято СамыйГлавныйОтвет, то бишь результат, дублировать в самом первом посте. ИМХО очень логично - человек нашёл в поиске свою проблему и не нужно листать до конца, чтобы узнать решение.
Надо бы на Винграде такое правило ввести - это не к тебе, ессно, а к модераторам

Это сообщение отредактировал(а) borisbn - 12.7.2011, 20:39


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
vlarry
Дата 13.7.2011, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.8.2009

Репутация: нет
Всего: нет



блин, резал-резал, но пока до хрена и больше ошибок,..не получается пока состыковать...уже подумываю написать свой упаковщикsmile

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1055 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.