private DirectoryDetails LoadData(string path) { BinaryFormatter bf = new BinaryFormatter(); FileStream fs = null; DirectoryDetails dd = null; try { fs = new FileStream(path, FileMode.Open); dd = (DirectoryDetails)bf.Deserialize(fs); return(dd); } catch { return(dd); } finally { if (fs != null) { fs.Close(); } } }
private void BtnSave_Click(object sender, EventArgs e) { if (newDir != null) { try { SaveData(backupPath); lbMsg.Text = "数据备份成功"; lbBackupData.Text = "正在搜索备份数据..."; Task.Run(() => { backupDir = LoadData(backupPath); if (backupDir != null) { lbBackupData.Text = "备份数据已载入"; } else { lbBackupData.Text = "无备份数据"; } }); } catch (Exception ex) { lbMsg.Text = "数据备份失败," + ex.Message; } } else { lbMsg.Text = "还未进行扫描,无法备份数据"; } }
private void BtnScan_Click(object sender, EventArgs e) { txtScanningMsg.Text = ""; pbScan.Value = 0; IsScanning = true; scanningMsg = new ScanningMsg(); mainTimer.Start(); Stopwatch watch = new Stopwatch(); watch.Start(); btnScan.Enabled = false; btnSave.Enabled = false; btnCompare.Enabled = false; Task.Run(() => { newDir = DirectoryDetails.AutoScanning("C:\\", scanningMsg); IsScanning = false; Thread.Sleep(interval * 2); mainTimer.Stop(); btnScan.Enabled = true; btnSave.Enabled = true; if (backupDir != null) { btnCompare.Enabled = true; } watch.Stop(); pbScan.Value = pbScan.Maximum; lbMsg.Text = string.Format("扫描完成!用时 {0} 秒", watch.Elapsed.TotalSeconds); }); }
private void Compare(DirectoryDetails newDir, DirectoryDetails backupDir, long deltaVal) { foreach (var dir in newDir.Subdirectories) { int index = -1; if ((index = backupDir.Subdirectories.IndexOf(dir)) != -1) { if ((dir.Size - backupDir.Subdirectories[index].Size) > deltaVal) { txtCompareMsg.Text += string.Format("[已存在文件夹(+{0})] {1}\r\n", DirectoryDetails.SizeToString(dir.Size - backupDir.Subdirectories[index].Size), dir.Path); Compare(dir, backupDir.Subdirectories[index], deltaVal); } } else { if (dir.Size > deltaVal) { txtCompareMsg.Text += string.Format("[新增文件夹(+{0})] {1}\r\n", DirectoryDetails.SizeToString(dir.Size), dir.Path); } } } foreach (var file in newDir.Subfiles) { long size = new FileInfo(file).Length; int index = -1; if ((index = backupDir.Subfiles.IndexOf(file)) == -1) { if (size > deltaVal) { txtCompareMsg.Text += string.Format("[新增文件({0})] {1}\r\n", DirectoryDetails.SizeToString(size), file); } } } }
private void MainWindow_Load(object sender, EventArgs e) { CheckForIllegalCrossThreadCalls = false; IsScanning = false; btnCompare.Enabled = false; btnSave.Enabled = false; mainTimer.Interval = interval; lbBackupData.Text = "正在搜索备份数据..."; Task.Run(() => { backupDir = LoadData(backupPath); if (backupDir != null) { lbBackupData.Text = "备份数据已载入"; } else { lbBackupData.Text = "无备份数据"; } }); }
/// <summary> /// Generates the ProcessPipDetails for a given Pip /// </summary> public ProcessPipDetails GenerateProcessPipDetails(Process pip) { ProcessPipDetails processPipDetails = new ProcessPipDetails(); InvocationDetails invoDetails = new InvocationDetails { Executable = pip.Executable.IsValid ? pip.Executable.Path.ToString(PathTable): null, ToolDescription = pip.ToolDescription.IsValid ? pip.ToolDescription.ToString(StringTable) : null, ResponseFilePath = pip.ResponseFile.IsValid ? pip.ResponseFile.Path.ToString(PathTable) : null, Arguments = pip.Arguments.IsValid ? pip.Arguments.ToString(PathTable) : null, ResponseFileContents = pip.ResponseFileData.IsValid ? pip.ResponseFileData.ToString(PathTable) : null, }; invoDetails.EnvironmentVariables = pip.EnvironmentVariables. Select(x => new KeyValuePair <string, string> (x.Name.ToString(StringTable), x.Value.IsValid ? x.Value.ToString(PathTable) : null)) .ToList(); invoDetails.EnvironmentVariables = invoDetails.EnvironmentVariables.Any() ? invoDetails.EnvironmentVariables : null; processPipDetails.InvocationDetails = invoDetails; InputOutputDetails inOutDetails = new InputOutputDetails { STDInFile = pip.StandardInput.File.IsValid ? pip.StandardInput.File.Path.ToString(PathTable): null, STDOut = pip.StandardOutput.IsValid ? pip.StandardOutput.Path.ToString(PathTable): null, STDError = pip.StandardError.IsValid ? pip.StandardError.Path.ToString() : null, STDDirectory = pip.StandardDirectory.IsValid ? pip.StandardDirectory.ToString(PathTable) : null, WarningRegex = pip.WarningRegex.IsValid ? pip.WarningRegex.Pattern.ToString(StringTable) : null, ErrorRegex = pip.ErrorRegex.IsValid ? pip.ErrorRegex.Pattern.ToString(StringTable) : null, STDInData = pip.StandardInputData.IsValid ? pip.StandardInputData.ToString(PathTable) : null }; processPipDetails.InputOutputDetails = inOutDetails; DirectoryDetails dirDetails = new DirectoryDetails { WorkingDirectory = pip.WorkingDirectory.IsValid ? pip.WorkingDirectory.ToString(PathTable) : null, UniqueOutputDirectory = pip.UniqueOutputDirectory.IsValid ? pip.UniqueOutputDirectory.ToString(PathTable) : null, TempDirectory = pip.TempDirectory.IsValid ? pip.TempDirectory.ToString(PathTable) : null, }; if (pip.AdditionalTempDirectories.IsValid) { dirDetails.ExtraTempDirectories = pip.AdditionalTempDirectories. Select(x => x.ToString(PathTable)) .ToList(); } dirDetails.ExtraTempDirectories = dirDetails.ExtraTempDirectories.Any() ? dirDetails.ExtraTempDirectories : null; processPipDetails.DirectoryDetails = dirDetails; AdvancedOptions advancedOptions = new AdvancedOptions { TimeoutWarning = pip.WarningTimeout.GetValueOrDefault(), TimeoutError = pip.Timeout.GetValueOrDefault(), SuccessCodes = pip.SuccessExitCodes.ToList(), Semaphores = pip.Semaphores.Select(x => x.Name.ToString(StringTable)).ToList(), HasUntrackedChildProcesses = pip.HasUntrackedChildProcesses, ProducesPathIndependentOutputs = pip.ProducesPathIndependentOutputs, OutputsMustRemainWritable = pip.OutputsMustRemainWritable, AllowPreserveOutputs = pip.AllowPreserveOutputs }; advancedOptions.SuccessCodes = advancedOptions.SuccessCodes.Any() ? advancedOptions.SuccessCodes : null; advancedOptions.Semaphores = advancedOptions.Semaphores.Any() ? advancedOptions.Semaphores : null; processPipDetails.AdvancedOptions = advancedOptions; ProcessInputOutputDetails procInOutDetails = new ProcessInputOutputDetails { FileDependencies = pip.Dependencies.Select(x => x.IsValid ? x.Path.ToString(PathTable) : null).ToList(), DirectoryDependencies = pip.DirectoryDependencies.Select(x => x.IsValid ? x.Path.ToString(PathTable) : null).ToList(), OrderDependencies = pip.OrderDependencies.Select(x => x.Value).ToList(), FileOutputs = pip.FileOutputs.Select(x => x.IsValid ? x.Path.ToString(PathTable) : null).ToList(), DirectoryOuputs = pip.DirectoryOutputs.Select(x => x.IsValid ? x.Path.ToString(PathTable) : null).ToList(), UntrackedPaths = pip.UntrackedPaths.Select(x => x.IsValid ? x.ToString(PathTable) : null).ToList(), UntrackedScopes = pip.UntrackedScopes.Select(x => x.IsValid ? x.ToString(PathTable) : null).ToList(), }; procInOutDetails.FileDependencies = procInOutDetails.FileDependencies.Any() ? procInOutDetails.FileDependencies : null; procInOutDetails.DirectoryDependencies = procInOutDetails.DirectoryDependencies.Any() ? procInOutDetails.DirectoryDependencies : null; procInOutDetails.OrderDependencies = procInOutDetails.OrderDependencies.Any() ? procInOutDetails.OrderDependencies : null; procInOutDetails.FileOutputs = procInOutDetails.FileOutputs.Any() ? procInOutDetails.FileOutputs : null; procInOutDetails.DirectoryOuputs = procInOutDetails.DirectoryOuputs.Any() ? procInOutDetails.DirectoryOuputs : null; procInOutDetails.UntrackedPaths = procInOutDetails.UntrackedPaths.Any() ? procInOutDetails.UntrackedPaths : null; procInOutDetails.UntrackedScopes = procInOutDetails.UntrackedScopes.Any() ? procInOutDetails.UntrackedScopes : null; processPipDetails.ProcessInputOutputDetails = procInOutDetails; ServiceDetails servDetails = new ServiceDetails { IsService = pip.IsService, ShutdownProcessPipId = pip.ShutdownProcessPipId.Value, ServicePipDependencies = pip.ServicePipDependencies.Select(x => x.Value).ToList(), IsStartOrShutdownKind = pip.IsStartOrShutdownKind }; servDetails.ServicePipDependencies = servDetails.ServicePipDependencies.Any() ? servDetails.ServicePipDependencies : null; processPipDetails.ServiceDetails = servDetails; return(processPipDetails); }