コード例 #1
0
ファイル: RarHeader.cs プロジェクト: zhouzu/sharpcompress
        private RarHeader(RarCrcBinaryReader reader, bool isRar5, ArchiveEncoding archiveEncoding)
        {
            _headerType     = HeaderType.Null;
            _isRar5         = isRar5;
            ArchiveEncoding = archiveEncoding;
            if (IsRar5)
            {
                HeaderCrc = reader.ReadUInt32();
                reader.ResetCrc();
                HeaderSize = (int)reader.ReadRarVIntUInt32(3);
                reader.Mark();
                HeaderCode  = reader.ReadRarVIntByte();
                HeaderFlags = reader.ReadRarVIntUInt16(2);

                if (HasHeaderFlag(HeaderFlagsV5.HAS_EXTRA))
                {
                    ExtraSize = reader.ReadRarVIntUInt32();
                }
                if (HasHeaderFlag(HeaderFlagsV5.HAS_DATA))
                {
                    AdditionalDataSize = (long)reader.ReadRarVInt();
                }
            }
            else
            {
                reader.Mark();
                HeaderCrc = reader.ReadUInt16();
                reader.ResetCrc();
                HeaderCode  = reader.ReadByte();
                HeaderFlags = reader.ReadUInt16();
                HeaderSize  = reader.ReadInt16();
                if (HasHeaderFlag(HeaderFlagsV4.HAS_DATA))
                {
                    AdditionalDataSize = reader.ReadUInt32();
                }
            }
        }
コード例 #2
0
ファイル: RarHeader.cs プロジェクト: liyifei21/sharpcompress
        internal static RarHeader Create(RarCrcBinaryReader reader)
        {
            try
            {
                RarHeader header = new RarHeader();

                reader.Mark();
                header.ReadStartFromReader(reader);
                header.ReadBytes += reader.CurrentReadByteCount;

                return(header);
            }
            catch (EndOfStreamException)
            {
                return(null);
            }
        }
コード例 #3
0
        internal static RarHeader Create(RarCrcBinaryReader reader, ArchiveEncoding archiveEncoding)
        {
            try
            {
                RarHeader header = new RarHeader();

                header.ArchiveEncoding = archiveEncoding;
                reader.Mark();
                header.ReadStartFromReader(reader);
                header.ReadBytes += reader.CurrentReadByteCount;

                return header;
            }
            catch (EndOfStreamException)
            {
                return null;
            }
        }
コード例 #4
0
        internal T PromoteHeader<T>(RarCrcBinaryReader reader)
            where T : RarHeader, new()
        {
            T header = new T();
            header.FillBase(this);

            reader.Mark();
            header.ReadFromReader(reader);
            header.ReadBytes += reader.CurrentReadByteCount;

            int headerSizeDiff = header.HeaderSize - (int)header.ReadBytes;

            if (headerSizeDiff > 0)
            {
                reader.ReadBytes(headerSizeDiff);
            }

            VerifyHeaderCrc(reader.GetCrc());

            return header;
        }