Exemple #1
0
 private static RootIndexBlock ReadRootBlock(IViewableData file, BlockInfoHeader rootBlockInfo)
 {
     using (var reader = new BinaryReader(GetBlockView(rootBlockInfo, file)))
     {
         return(RootIndexBlock.FromReader(reader));
     }
 }
Exemple #2
0
 private static Stream GetBlockView(BlockInfoHeader blockInfo, IViewableData file)
 {
     if (blockInfo.Size == 0)
     {
         return(null);
     }
     return(file.CreateView((long)blockInfo.Offset, (long)blockInfo.Size));
 }
Exemple #3
0
 protected ArchiveFileBase(IViewableData file, ArchiveHeader header,
                           BlockInfoHeader[] blockInfoHeaders, RootIndexBlock rootIndex)
 {
     File          = file;
     Header        = header;
     BlockPointers = blockInfoHeaders;
     RootIndex     = rootIndex;
 }
Exemple #4
0
        private static ArchiveHeader ReadHeader(IViewableData file)
        {
            var length = Marshal.SizeOf <ArchiveHeader>();

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