Exemple #1
0
        private void ReadArchive(HeaderBuffer headerBytes)
        {
            while (true)
            {
                var prop = headerBytes.ReadProperty();
                switch (prop)
                {
                case HeaderProperty.kEncodedHeader:
                {
                    ArchiveInfo = ReadPackedStreams(headerBytes);
                    stream.Seek((long)ArchiveInfo.PackPosition + BaseOffset, SeekOrigin.Begin);
                    var firstFolder = ArchiveInfo.Folders.First();

                    ulong unpackSize = firstFolder.GetUnpackSize();

                    ulong packSize = ArchiveInfo.PackedStreams.Select(x => x.PackedSize)
                                     .Aggregate((ulong)0, (sum, size) => sum + size);

                    byte[]  unpackedBytes = new byte[(int)unpackSize];
                    Decoder decoder       = new Decoder();
                    decoder.SetDecoderProperties(firstFolder.Coders[0].Properties);
                    using (MemoryStream outStream = new MemoryStream(unpackedBytes))
                    {
                        decoder.Code(stream, outStream, (long)(packSize), (long)unpackSize, null);
                    }

                    headerBytes = new HeaderBuffer {
                        Bytes = unpackedBytes
                    };
                }
                break;

                case HeaderProperty.kHeader:
                {
                    ReadFileHeader(headerBytes);
                    return;
                }

                default:
                    throw new NotSupportedException("7Zip header " + prop);
                }
            }
        }
        private void ReadArchive(HeaderBuffer headerBytes)
        {
            while (true)
            {
                var prop = headerBytes.ReadProperty();
                switch (prop)
                {
                    case HeaderProperty.kEncodedHeader:
                        {
                            ArchiveInfo = ReadPackedStreams(headerBytes);
                            stream.Seek((long)ArchiveInfo.PackPosition + BaseOffset, SeekOrigin.Begin);
                            var firstFolder = ArchiveInfo.Folders.First();

                            ulong unpackSize = firstFolder.GetUnpackSize();

                            ulong packSize = ArchiveInfo.PackedStreams.Select(x => x.PackedSize)
                                .Aggregate((ulong)0, (sum, size) => sum + size);

                            byte[] unpackedBytes = new byte[(int)unpackSize];
                            Decoder decoder = new Decoder();
                            decoder.SetDecoderProperties(firstFolder.Coders[0].Properties);
                            using (MemoryStream outStream = new MemoryStream(unpackedBytes))
                            {
                               decoder.Code(stream, outStream, (long)(packSize), (long)unpackSize, null);
                            }

                            headerBytes = new HeaderBuffer { Bytes = unpackedBytes };
                        }
                        break;
                    case HeaderProperty.kHeader:
                        {
                            ReadFileHeader(headerBytes);
                            return;
                        }
                    default:
                        throw new NotSupportedException("7Zip header " + prop);
                }
            }
        }