// we must be at the right position in the file! bool CentralDirFileHeader::read(QIODevice* ioDevice) { Q_ASSERT(ioDevice); IOBuffer buffer; buffer.read( ioDevice, CD_FILE_HEADER_SIZE ); signature = buffer.readUInt32( ); // 0x02014b50 if ( signature != CD_FILE_HEADER_SIGNATURE ) return false; versionMadeBy = buffer.readUInt16( ); versionNeeded = buffer.readUInt16( ); generalFlag = buffer.readUInt16( ); compressionMethod = buffer.readUInt16( ); lastModFileTime = buffer.readUInt16( ); lastModFileDate = buffer.readUInt16( ); crc_32 = buffer.readUInt32( ); compressedSize = buffer.readUInt32( ); uncompressedSize = buffer.readUInt32( ); filenameLength = buffer.readUInt16( ); extraFieldLength = buffer.readUInt16( ); fileCommentLength = buffer.readUInt16( ); diskNumberStart = buffer.readUInt16( ); internalFileAttr = buffer.readUInt16( ); externalFileAttr = buffer.readUInt32( ); relativeOffset = buffer.readUInt32( ); if (filenameLength) { fileName = ioDevice->read( filenameLength ); if ( isUTF8() ) sFileName = QTextCodec::codecForUtfText(fileName)->toUnicode( fileName ); // Save in a QString for convienience (searching etc) else sFileName = QTextCodec::codecForLocale()->toUnicode( fileName ); // Save in a QString for convienience (searching etc) } readExtraData( ioDevice ); if (fileCommentLength) comment = ioDevice->read( fileCommentLength ); return isValid(); }