//e.保存切片状态 public void save_SliceFile(int processedBlockAmount, int sliceFileAmount, DateTime endBlockTime) { string UtxoSliceFileFinalPath = Path.Combine(UtxoSliceFilePath, "UtxoSlice_" + processedBlockAmount + "_" + endBlockTime.ToString("yyyy年MM月dd日HH时mm分ss秒") + ".dat"); SliceFileItem_Class sliceFileItem = new SliceFileItem_Class(utxoDictionary, sliceFileAmount, sameTransactionCount); using (StreamWriter sw = File.CreateText(UtxoSliceFileFinalPath)) { JsonSerializer serializer = new JsonSerializer(); serializer.Serialize(sw, sliceFileItem); } orderedBlockchainParser.Compress(UtxoSliceFileFinalPath, true); }
//h.恢复UTXOSlicer上下文 public void restore_UTXOSlicerContextForProgram() { string utxoSlicerContextFileFinalPath = Path.Combine(UtxoSliceFilePath, UtxoSliceFileName); //判断给定文件名是压缩文件还是txt文件 FileInfo fileName = new FileInfo(utxoSlicerContextFileFinalPath); if (fileName.Extension == ".rar") { Console.WriteLine("正在解压UtxoSlice下文状态文件......"); orderedBlockchainParser.Decompress(utxoSlicerContextFileFinalPath, false); utxoSlicerContextFileFinalPath = Path.Combine(UtxoSliceFilePath, Path.GetFileNameWithoutExtension(utxoSlicerContextFileFinalPath)); } if (File.Exists(utxoSlicerContextFileFinalPath)) { //1.反序列化UtxoSlice文件 Console.WriteLine("开始提取程序上下文状态文件数据(UtxoSlice)........."); SliceFileItem_Class sliceFileItemObject = null; Stopwatch timer = new Stopwatch(); timer.Start(); try { using (StreamReader sr = File.OpenText(utxoSlicerContextFileFinalPath)) { JsonSerializer jsonSerializer = new JsonSerializer(); sliceFileItemObject = jsonSerializer.Deserialize(sr, typeof(SliceFileItem_Class)) as SliceFileItem_Class; } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine("UtxoSlice文件保存不完整或已经损坏。该错误可能是由于在保存UtxoSlice文件时提前终止程序造成的,或是人为修改了最近的UtxoSlice文件。"); } timer.Stop(); Console.WriteLine("提取结束,反序列化切片用时:" + timer.Elapsed); //恢复UTXO字典 utxoDictionary = sliceFileItemObject.utxoDictionary; //恢复其它 sliceFileAmount = sliceFileItemObject.sliceFileAmount; sameTransactionCount = sliceFileItemObject.sameTransactionCount; sliceFileItemObject.Dispose(); File.Delete(utxoSlicerContextFileFinalPath);//删除解压后的文件UtxoSlice文件 Console.WriteLine("UtxoSlice上下文状态恢复成功........."); } else { Console.WriteLine(utxoSlicerContextFileFinalPath + " 文件不存在!!!"); } }