Редактирование: Работа с zip архивами в Qt

Материал из Wiki.crossplatform.ru

Перейти к: навигация, поиск
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
-
В Qt есть не документированные классы для работы с zip архивами. Эти классы позволяют распаковывать уже существующие архивы по заданному пути, так и создавать новые архивы. Для создания используется класс '''QZipWriter''', для распаковки '''QZipReader'''. Реализация этих классов находятся по следующему пути ''qt/src/gui/text'' в файлах ''qzipreader_p.h'', ''qzipwriter_p.h'' и ''qzip.cpp''. Для использования этих классов предлагаю скопировать указанные файлы в свой проект и добавить их в компиляцию.
+
В Qt есть не документированные классы для работы с zip архивами. Эти классы позволяют распаковывать уже существующие архивы по заданному пути, так и создавать новые архивы. Для создания используется класс '''QZipWriter''', для распаковки '''QZipReader'''. Реализация этих классов находятся по следующему пути ''qt/src/gui/text'' в файлах ''qzipreader_p.h'', ''qzipwriter_p.h'' и ''qzip.cpp''.
{{Замечание | Это приватные классы Qt, использовать на свой страх и риск. }}
{{Замечание | Это приватные классы Qt, использовать на свой страх и риск. }}
 +
 +
Для использования этих классов предлагаю скопировать указанные файлы в свой проект и добавить их в компиляцию.
{{Замечание | Оба класса содержат встроенную в исходники документацию, которую можно прочитать для получения более подробной информации.}}
{{Замечание | Оба класса содержат встроенную в исходники документацию, которую можно прочитать для получения более подробной информации.}}
-
{{Замечание | Если в качестве системы сборки Вы используете cmake, не забудьте добавить в файл проекта '''''include_directories(${QT_INCLUDES})'''''}}
 
== Использование QZipWriter (создание архивов) ==
== Использование QZipWriter (создание архивов) ==
Строка 28: Строка 29:
         zip.setCompressionPolicy(QZipWriter::AutoCompress);
         zip.setCompressionPolicy(QZipWriter::AutoCompress);
-
         QString file_name = QLatin1String("file.txt");
+
         QString file_name = QLatin1String("host_graph.xml.ini");
-
         QString file_path = QLatin1String("/path/to/file/file.txt");
+
         QString file_path = QLatin1String("/home/igor_bogomolov/.config/k095-client/host_graph.xml.ini");
         QFile file(file_path);
         QFile file(file_path);
         if (!file.open(QIODevice::ReadOnly))
         if (!file.open(QIODevice::ReadOnly))
Строка 47: Строка 48:
         zip.setCompressionPolicy(QZipWriter::AutoCompress);
         zip.setCompressionPolicy(QZipWriter::AutoCompress);
-
         QString dir_name  = QLatin1String("directory");
+
         QString dir_name  = QLatin1String("k095_client");
-
         QString file_name = QLatin1String("file.txt");
+
         QString file_name = QLatin1String("host_graph.xml.ini");
-
         QString file_path = QLatin1String("/path/to/file/file.txt");
+
         QString file_path = QLatin1String("/home/igor_bogomolov/.config/k095-client/host_graph.xml.ini");
         QFile file(file_path);
         QFile file(file_path);
         if (!file.open(QIODevice::ReadOnly))
         if (!file.open(QIODevice::ReadOnly))
Строка 73: Строка 74:
         zip.setCompressionPolicy(QZipWriter::AutoCompress);
         zip.setCompressionPolicy(QZipWriter::AutoCompress);
-
         QString path = QLatin1String("/path/to/dir/"); // в данном случае завершающий '/' очень важен
+
         QString path = QLatin1String("/home/igor_bogomolov/.config/k095-client/");
         QDirIterator it(path, QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot,
         QDirIterator it(path, QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot,
                         QDirIterator::Subdirectories);
                         QDirIterator::Subdirectories);
Строка 79: Строка 80:
             QString file_path = it.next();
             QString file_path = it.next();
             if (it.fileInfo().isDir()) {
             if (it.fileInfo().isDir()) {
-
                 zip.setCreationPermissions(QFile::permissions(file_path));
+
                 zip.setCreationPermissions(QFile::ReadOwner|QFile::WriteOwner|QFile::ExeOwner |
 +
                                          QFile::ReadGroup|QFile::ExeGroup |
 +
                                          QFile::ExeOther);
                 zip.addDirectory(file_path.remove(path));
                 zip.addDirectory(file_path.remove(path));
             } else if (it.fileInfo().isFile()) {
             } else if (it.fileInfo().isFile()) {
Строка 133: Строка 136:
== Обсуждение ==
== Обсуждение ==
-
[http://www.forum.crossplatform.ru/index.php?showtopic=6270 Обсудить на форуме...]
+
[http://www.forum.crossplatform.ru/index.php?showtopic=3680 Обсудить на форуме...]
[[Категория:Qt]]
[[Категория:Qt]]
[[Категория:Qt FAQ]]
[[Категория:Qt FAQ]]

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Wiki.crossplatform.ru:Авторское право). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!


Шаблоны, использованные на текущей версии страницы: