Esempio n. 1
0
 protected ArchiveFileBase(IViewableData file, ArchiveHeader header,
                           BlockInfoHeader[] blockInfoHeaders, RootIndexBlock rootIndex)
 {
     File          = file;
     Header        = header;
     BlockPointers = blockInfoHeaders;
     RootIndex     = rootIndex;
 }
Esempio n. 2
0
        private static ArchiveHeader ReadHeader(IViewableData file)
        {
            var length = Marshal.SizeOf <ArchiveHeader>();

            using (var stream = file.CreateView(0, length))
            {
                return(ArchiveHeader.ReadFrom(stream));
            }
        }
Esempio n. 3
0
        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);
                }
        }
Esempio n. 4
0
        /// <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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
 public ArchiveFile(IViewableData file, ArchiveHeader header,
                    BlockInfoHeader[] blockInfoHeaders, RootIndexBlock rootIndex)
     : base(file, header, blockInfoHeaders, rootIndex)
 {
     _dataEntries = ReadDataHeaders(GetBlockReader(rootIndex.BlockIndex));
 }