Exemplo n.º 1
0
        //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);
        }
Exemplo n.º 2
0
        //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 + " 文件不存在!!!");
            }
        }