Russian Qt Forum
Май 03, 2024, 07:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QZipReader  (Прочитано 11887 раз)
-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

Сообщений: 5876


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


Просмотр профиля 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

Сообщений: 5876


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


Просмотр профиля 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.116 секунд. Запросов: 22.