Редактирование: Работа с 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, использовать на свой страх и риск. }} | ||
+ | |||
+ | Для использования этих классов предлагаю скопировать указанные файлы в свой проект и добавить их в компиляцию. | ||
{{Замечание | Оба класса содержат встроенную в исходники документацию, которую можно прочитать для получения более подробной информации.}} | {{Замечание | Оба класса содержат встроенную в исходники документацию, которую можно прочитать для получения более подробной информации.}} | ||
- | |||
== Использование QZipWriter (создание архивов) == | == Использование QZipWriter (создание архивов) == | ||
Строка 28: | Строка 29: | ||
zip.setCompressionPolicy(QZipWriter::AutoCompress); | zip.setCompressionPolicy(QZipWriter::AutoCompress); | ||
- | QString file_name = QLatin1String(" | + | QString file_name = QLatin1String("host_graph.xml.ini"); |
- | QString file_path = QLatin1String("/ | + | 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(" | + | QString dir_name = QLatin1String("k095_client"); |
- | QString file_name = QLatin1String(" | + | QString file_name = QLatin1String("host_graph.xml.ini"); |
- | QString file_path = QLatin1String("/ | + | 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("/ | + | 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:: | + | 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= | + | [http://www.forum.crossplatform.ru/index.php?showtopic=3680 Обсудить на форуме...] |
[[Категория:Qt]] | [[Категория:Qt]] | ||
[[Категория:Qt FAQ]] | [[Категория:Qt FAQ]] |