Read() private method

private Read ( BinaryReader reader ) : void
reader BinaryReader
return void
        protected ZipHeader ReadHeader(uint headerBytes, BinaryReader reader)
        {
            switch (headerBytes)
            {
                case 0x5054b50:
                    return null;

                case 0x6054b50:
                {
                    DirectoryEndHeader header3 = new DirectoryEndHeader();
                    header3.Read(reader);
                    return header3;
                }
                case 0x2014b50:
                {
                    DirectoryEntryHeader header2 = new DirectoryEntryHeader();
                    header2.Read(reader);
                    return header2;
                }
                case 0x4034b50:
                {
                    LocalEntryHeader entryHeader = new LocalEntryHeader();
                    entryHeader.Read(reader);
                    this.LoadHeader(entryHeader, reader.BaseStream);
                    this.lastEntryHeader = entryHeader;
                    return entryHeader;
                }
                case 0x6064b50:
                case 0x7064b50:
                {
                    IgnoreHeader header4 = new IgnoreHeader(ZipHeaderType.Ignore);
                    header4.Read(reader);
                    return header4;
                }
                case 0x8074b50:
                    if (FlagUtility.HasFlag<HeaderFlags>(this.lastEntryHeader.Flags, HeaderFlags.UsePostDataDescriptor))
                    {
                        this.lastEntryHeader.Crc = reader.ReadUInt32();
                        this.lastEntryHeader.CompressedSize = reader.ReadUInt32();
                        this.lastEntryHeader.UncompressedSize = reader.ReadUInt32();
                    }
                    else
                    {
                        reader.ReadUInt32();
                        reader.ReadUInt32();
                        reader.ReadUInt32();
                    }
                    return null;

                case 0x30304b50:
                    return new SplitHeader();
            }
            throw new NotSupportedException("Unknown header: " + headerBytes);
        }
Beispiel #2
0
        protected ZipHeader ReadHeader(uint headerBytes, BinaryReader reader)
        {
            switch (headerBytes)
            {
                case ENTRY_HEADER_BYTES:
                    {
                        var entryHeader = new LocalEntryHeader();
                        entryHeader.Read(reader);
                        LoadHeader(entryHeader, reader.BaseStream);

                        lastEntryHeader = entryHeader;
                        return entryHeader;
                    }
                case DIRECTORY_START_HEADER_BYTES:
                    {
                        var entry = new DirectoryEntryHeader();
                        entry.Read(reader);
                        return entry;
                    }
                case POST_DATA_DESCRIPTOR:
                    {
                        if (FlagUtility.HasFlag(lastEntryHeader.Flags, HeaderFlags.UsePostDataDescriptor))
                        {
                            lastEntryHeader.Crc = reader.ReadUInt32();
                            lastEntryHeader.CompressedSize = reader.ReadUInt32();
                            lastEntryHeader.UncompressedSize = reader.ReadUInt32();
                        }
                        else
                        {
                            reader.ReadUInt32();
                            reader.ReadUInt32();
                            reader.ReadUInt32();
                        }
                        return null;
                    }
                case DIGITAL_SIGNATURE:
                    return null;
                case DIRECTORY_END_HEADER_BYTES:
                    {
                        var entry = new DirectoryEndHeader();
                        entry.Read(reader);
                        return entry;
                    }
                case SPLIT_ARCHIVE_HEADER_BYTES:
                    {
                        return new SplitHeader();
                    }
                case ZIP64_END_OF_CENTRAL_DIRECTORY:
                case ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR:
                    {
                        var entry = new IgnoreHeader(ZipHeaderType.Ignore);
                        entry.Read(reader);
                        return entry;
                    }
                default:
                    throw new NotSupportedException("Unknown header: " + headerBytes);
            }
        }