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); } } }