Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: -QT- от Март 30, 2009, 15:16



Название: QZipReader
Отправлено: -QT- от Март 30, 2009, 15:16
Начал разбирать пример
http://vingrad.ru/blogs/sabrog/2009/03/20/qt-45-rabota-s-zip-arhivami/ (http://vingrad.ru/blogs/sabrog/2009/03/20/qt-45-rabota-s-zip-arhivami/)

Все работает кроме распаковки, упаковывает файлы и каталоги работает как зверь  ;D

Код
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

НО ! Распакованных файлов нетути так же как и ошибок не выдает сво-чь.
У кого какие мысли по этому поводу.


Название: Re: QZipReader - РЕШЕНО
Отправлено: -QT- от Март 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();    

Вот и всё ! ;)


Название: Re: QZipReader
Отправлено: Nub от Март 31, 2009, 17:30
а он работает с обычными виндовыми zip'ами не работает?


Название: Re: QZipReader
Отправлено: Пантер от Март 31, 2009, 19:23
Интересно поставлен вопрос. ;D


Название: Re: QZipReader
Отправлено: Detonator от Апрель 01, 2009, 10:02
а он работает с обычными виндовыми zip'ами не работает?

Отнюдь.


Название: Re: QZipReader
Отправлено: fsMark от Апрель 01, 2009, 13:23
Чтож уточним вопрос, есть такой замечательный формат от майкрософт Excel2007(xlsx), он представляет из себя набор зазипованных xml файлов. так вот если этот файл создан Excel`ем то данный пример для этого файла не работает, т. е. он не может его разархивировать...  хотя для winZip это не составляет труда :). Возникает вопрос каковы ограничения на формат поддерживаемых файлов для реализации zip включенной в Qt.


Название: Re: QZipReader
Отправлено: SABROG от Апрель 22, 2009, 17:56
Если я правильно понимаю, то xlsx - ODF формат. А QZipReader/QZipWriter именно дл ODF заточен.
Приаттачте такой файлик, я проверю у себя.


Название: Re: QZipReader
Отправлено: Пантер от Апрель 22, 2009, 18:20
xlsx - совершенно не ODF формат.


Название: Re: QZipReader
Отправлено: SABROG от Апрель 22, 2009, 21:59
xlsx - совершенно не ODF формат.
Значит какой-нибудь Microsoft Open XML.