Пример #1
0
        public void LoadFileHeaders(Context context, BlockHeader block)
        {
            BlockContentsSource blockContentsSource = this.CreateBlockContentsSourceAndSeekToFileHeadersStart(context, block);

            BinaryReader fileHeaderReader = context.Reader.BaseReader;

            try {
                fileHeaderReader = this.GetReaderForPotentiallyEncryptedBlock(context, fileHeaderReader, block);
                fileHeaderReader = this.GetReaderForPotentiallyCompressedBlock(context, fileHeaderReader, block);
                using (var structureReader = new ContainerFileLoaderStructureReader(fileHeaderReader, leaveOpen: fileHeaderReader == context.Reader.BaseReader)) {
                    for (int fileIndex = 0; fileIndex < block.NumFiles; ++fileIndex)
                    {
                        long?errorOffset = block.IsCompressed ? default(long?) : context.Reader.StreamPosition;
                        var  fileHeader  = structureReader.ReadFileHeader();
                        fileHeader = context.FileHeaderTransformer.Transform(fileHeader);
                        this.verifier.VerifyFileHeader(fileHeader, block.IsCompressed, errorOffset);

                        this.AddFileToFileSystem(context, fileHeader, blockContentsSource);
                    }
                }
            } finally {
                if (fileHeaderReader != context.Reader.BaseReader)
                {
                    fileHeaderReader.Dispose();
                }
            }
        }