private static RootIndexBlock ReadRootBlock(IViewableData file, BlockInfoHeader rootBlockInfo) { using (var reader = new BinaryReader(GetBlockView(rootBlockInfo, file))) { return(RootIndexBlock.FromReader(reader)); } }
private static Stream GetBlockView(BlockInfoHeader blockInfo, IViewableData file) { if (blockInfo.Size == 0) { return(null); } return(file.CreateView((long)blockInfo.Offset, (long)blockInfo.Size)); }
protected ArchiveFileBase(IViewableData file, ArchiveHeader header, BlockInfoHeader[] blockInfoHeaders, RootIndexBlock rootIndex) { File = file; Header = header; BlockPointers = blockInfoHeaders; RootIndex = rootIndex; }
private static ArchiveHeader ReadHeader(IViewableData file) { var length = Marshal.SizeOf <ArchiveHeader>(); using (var stream = file.CreateView(0, length)) { return(ArchiveHeader.ReadFrom(stream)); } }
public IndexFile(IViewableData file, ArchiveHeader header, BlockInfoHeader[] blockInfoHeaders, RootIndexBlock rootIndex) : base(file, header, blockInfoHeaders, rootIndex) { RootFolder = new FolderEntry("", this, new BinaryReader(GetBlockView(rootIndex.BlockIndex), Encoding.UTF8)); using (var fileStream = System.IO.File.Open(FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) using (var sha = SHA1.Create()) { _fileHash = sha.ComputeHash(fileStream); } }
/// <summary> /// </summary> /// <returns>Index block number</returns> private static BlockInfoHeader[] ReadBlockPointers( IViewableData file, ArchiveHeader header) { var blockPointers = new BlockInfoHeader[header.DataHeader.BlockCount]; var startPosition = header.DataHeader.BlockTableOffset; var length = header.DataHeader.BlockCount * Marshal.SizeOf <BlockInfoHeader>(); using (var reader = new BinaryReader(file.CreateView((long)startPosition, length))) { for (var x = 0; x < header.DataHeader.BlockCount; x++) { blockPointers[x] = BlockInfoHeader.FromReader(reader); } } return(blockPointers); }
public ArchiveFile(IViewableData file, ArchiveHeader header, BlockInfoHeader[] blockInfoHeaders, RootIndexBlock rootIndex) : base(file, header, blockInfoHeaders, rootIndex) { _dataEntries = ReadDataHeaders(GetBlockReader(rootIndex.BlockIndex)); }