Exemple #1
0
        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();
                }
            }
        }
Exemple #2
0
        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 = "还未进行扫描,无法备份数据";
            }
        }
Exemple #3
0
        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);
            });
        }
Exemple #4
0
        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);
                    }
                }
            }
        }
Exemple #5
0
        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 = "无备份数据";
                }
            });
        }
Exemple #6
0
        /// <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);
        }