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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QZipReader  (Прочитано 12432 раз)
-QT-
Гость
« : Марта 30, 2009, 15:16 »

Начал разбирать пример
http://vingrad.ru/blogs/sabrog/2009/03/20/qt-45-rabota-s-zip-arhivami/

Все работает кроме распаковки, упаковывает файлы и каталоги работает как зверь  Смеющийся

Код
C++ (Qt)
QZipReader zip(fileName);
if( zip.exists() )
    zip.extractAll(dest);
zip.close();

Код
C++ (Qt)
zip.status()
выдает 0 то есть

Код
C++ (Qt)
enum   Status {
 NoError, FileReadError, FileOpenError, FilePermissionsError,
 FileError
}
согласно этому NoError

НО ! Распакованных файлов нетути так же как и ошибок не выдает сво-чь.
У кого какие мысли по этому поводу.
Записан
-QT-
Гость
« Ответ #1 : Марта 31, 2009, 10:48 »

Код
C++ (Qt)
QDir baseDir(destinationDir);
 
QZipReader unzip(fileName, QIODevice::ReadOnly);
QList<QZipReader::FileInfo> allFiles = unzip.fileInfoList();
QZipReader::FileInfo fi;
 
foreach (QZipReader::FileInfo fi, allFiles)
{
const QString absPath = destinationDir + QDir::separator() + fi.filePath;
if (fi.isDir)
{
if (!baseDir.mkpath(fi.filePath))
return;
if (!QFile::setPermissions(absPath, fi.permissions))
return;
}
}
 
foreach (QZipReader::FileInfo fi, allFiles)
{
const QString absPath = destinationDir + QDir::separator() + fi.filePath;
if (fi.isFile)
{
QFile file(absPath);
if( file.open(QFile::WriteOnly) )
{
QApplication::setOverrideCursor(Qt::WaitCursor);
file.write(unzip.fileData(fi.filePath), unzip.fileData(fi.filePath).size());
file.setPermissions(fi.permissions);
QApplication::restoreOverrideCursor();
file.close();
}
}
}
unzip.close();    

Вот и всё ! Подмигивающий
Записан
Nub
Гость
« Ответ #2 : Марта 31, 2009, 17:30 »

а он работает с обычными виндовыми zip'ами не работает?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Марта 31, 2009, 19:23 »

Интересно поставлен вопрос. Смеющийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Detonator
Гость
« Ответ #4 : Апреля 01, 2009, 10:02 »

а он работает с обычными виндовыми zip'ами не работает?

Отнюдь.
Записан
fsMark
Гость
« Ответ #5 : Апреля 01, 2009, 13:23 »

Чтож уточним вопрос, есть такой замечательный формат от майкрософт Excel2007(xlsx), он представляет из себя набор зазипованных xml файлов. так вот если этот файл создан Excel`ем то данный пример для этого файла не работает, т. е. он не может его разархивировать...  хотя для winZip это не составляет труда Улыбающийся. Возникает вопрос каковы ограничения на формат поддерживаемых файлов для реализации zip включенной в Qt.
Записан
SABROG
Гость
« Ответ #6 : Апреля 22, 2009, 17:56 »

Если я правильно понимаю, то xlsx - ODF формат. А QZipReader/QZipWriter именно дл ODF заточен.
Приаттачте такой файлик, я проверю у себя.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Апреля 22, 2009, 18:20 »

xlsx - совершенно не ODF формат.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
SABROG
Гость
« Ответ #8 : Апреля 22, 2009, 21:59 »

xlsx - совершенно не ODF формат.
Значит какой-нибудь Microsoft Open XML.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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