Exemplo n.º 1
0
        private void OpenArchive()
        {
            ArchivFile = System.IO.File.Open(PathToArchiveFile, FileMode.Open, FileAccess.ReadWrite);
            SuperBlock superBlock = ReadSuperBlock();

            Logger.Debug($"A: Found Superblock: Start: {superBlock.MetadataStart}, Length: {superBlock.MetadataLength}; Hash: {superBlock.MetadataHash}");
            byte[] compressedMetadataBuffer = new byte[superBlock.MetadataLength];
            ArchivFile.Seek(superBlock.MetadataStart, SeekOrigin.Begin);
            ArchivFile.Read(compressedMetadataBuffer, 0, superBlock.MetadataLength);
            byte[] metadataBuffer = Compressor.Decompress(compressedMetadataBuffer, CompressionMethod.LZMA);
            string MetadataString = System.Text.Encoding.Default.GetString(metadataBuffer);

            Logger.Debug($"A: Found Metadata: '{MetadataString}' Length: {MetadataString.Length}");
            Metadata = JsonConvert.DeserializeObject <Metadata>(MetadataString);
        }
Exemplo n.º 2
0
        public void Dispose()
        {
            string MetadataPacked = JsonConvert.SerializeObject(Metadata);
            //Write Metadata to File
            int MetaDataChunkId     = WriteChunk(MetadataPacked, 0);
            int MetaDataChunkStart  = Metadata.GetChunkStart(MetaDataChunkId);
            int MetaDataChunkLength = Metadata.GetChunkLength(MetaDataChunkId);

            Logger.Debug($"MetadaChunk: Start: {MetaDataChunkStart}, Length: {MetaDataChunkLength}\n##########\n{MetadataPacked.ToString()}\n#############");
            string MetaDataChunkHash = "MD5DEMOHASH";
            //Write Superblock
            SuperBlock            NewSuperBlock        = new SuperBlock(MetaDataChunkStart, MetaDataChunkLength, MetaDataChunkHash);
            MessagePackSerializer SuperBlockSerializer = MessagePackSerializer.Get <SuperBlock>();
            Chunk SuperblockChunk = Metadata.GetSuperblockChunk();

            ArchivFile.Seek(SuperblockChunk.Start, SeekOrigin.Begin);
            SuperBlockSerializer.Pack(ArchivFile, NewSuperBlock);
            ArchivFile.Flush();
            ArchivFile.Close();
        }