コード例 #1
0
 void ReadHeader()
 {
     if (!QarArchiveHeader.TryRead(_reader, out _header))
     {
         throw new InvalidDataException("The contents of the stream are not in the qar archive format.");
     }
 }
コード例 #2
0
        public uint        Unknown2; // 0

        public static bool TryRead(BinaryReader reader, out QarArchiveHeader header)
        {
            header = new QarArchiveHeader();

            // invalid magic number
            if (reader.ReadUInt32() != Signature)
            {
                return(false);
            }

            header.Flags           = reader.ReadUInt32() ^ xorMask1;
            header.FileCount       = reader.ReadUInt32() ^ xorMask2;
            header.UnknownCount    = reader.ReadUInt32() ^ xorMask3;
            header.BlockFileEnd    = reader.ReadUInt32() ^ xorMask4;
            header.OffsetFirstFile = reader.ReadUInt32() ^ xorMask1;
            header.Version         = reader.ReadUInt32() ^ xorMask1; // 1 2
            header.Unknown2        = reader.ReadUInt32() ^ xorMask2; // 0

            // unknow version
            if (header.Version != 1 && header.Version != 2)
            {
                return(false);
            }

            // unknow Unknown2... what?
            if (header.Unknown2 != 0)
            {
                return(false);
            }

            return(true);
        }