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); }
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(); }