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