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 static ArchiveHeader ReadFrom(Stream stream) { var ret = new ArchiveHeader(); using (var binaryReader = new BinaryReader(stream, Encoding.UTF8, true)) { ret.Signature = binaryReader.ReadUInt32(); ret.Version = binaryReader.ReadUInt32(); ret.Reserved = binaryReader.ReadBytes(ReservedSectionSize); ret.DataHeader = DataHeader.ReadFrom(binaryReader); } if (ret.Signature != PackSignature) { throw new InvalidDataException($"File header value {ret.Signature:X4} does not match expected {PackSignature:X4}"); } return(ret); }
public ArchiveFile(IViewableData file, ArchiveHeader header, BlockInfoHeader[] blockInfoHeaders, RootIndexBlock rootIndex) : base(file, header, blockInfoHeaders, rootIndex) { _dataEntries = ReadDataHeaders(GetBlockReader(rootIndex.BlockIndex)); }