Ejemplo n.º 1
0
qint64 CentralDirFileHeader::write(QIODevice* ioDevice)
{
    Q_ASSERT(ioDevice);

    filenameLength  = fileName.size();
    extraFieldLength = extraField.size();
    fileCommentLength = comment.size();

    IOBuffer buffer;

    buffer.writeUInt32( signature );
    buffer.writeUInt16( versionMadeBy );
    buffer.writeUInt16( versionNeeded );
    buffer.writeUInt16( generalFlag );
    buffer.writeUInt16( compressionMethod );
    buffer.writeUInt16( lastModFileTime );
    buffer.writeUInt16( lastModFileDate );
    buffer.writeUInt32( crc_32 );
    buffer.writeUInt32( compressedSize );
    buffer.writeUInt32( uncompressedSize );
    buffer.writeUInt16( filenameLength );

    checkForExtraData();
    buffer.writeUInt16( extraFieldLength );
    buffer.writeUInt16( fileCommentLength );
    buffer.writeUInt16( diskNumberStart );
    buffer.writeUInt16( internalFileAttr );
    buffer.writeUInt32( externalFileAttr );
    buffer.writeUInt32( relativeOffset );

    if ( buffer.size() != CD_FILE_HEADER_SIZE )
    {
        qDebug() << "CentralDirFileHeader::write: invalid header size!";
        return 0;
    }

    if (filenameLength)
        buffer.writeRawBytes( fileName );

    if (extraFieldLength)
        buffer.writeRawBytes( extraField );

    if (fileCommentLength)
        buffer.writeRawBytes( comment );

    return ioDevice->write( buffer.getByteArray() );
}