Пример #1
0
        public List <CompareResult> SourceCompare(string sourcePath, string destinationPath)
        {
            List <CompareResult> _sourceResults = new List <CompareResult>();

            try
            {
                List <string> sourceFiles      = FolderLister.GetAllFiles(sourcePath);
                List <string> destinationFiles = FolderLister.GetAllFiles(destinationPath);

                _worker.ReportProgress(15);

                foreach (string fileOrFolder in sourceFiles)
                {
                    if (fileOrFolder.IsFile())
                    {
                        _sourceResults.Add(ProcessFile(fileOrFolder, destinationFiles, CompareDirection.SOURCE));
                    }
                    else if (BaseInfo.IncludeSubDiretory)
                    {
                        _sourceResults.AddRange(ProcessFolder(fileOrFolder, destinationFiles, CompareDirection.SOURCE));
                    }
                }

                _worker.ReportProgress(30);
            }
            catch (Exception ex)
            {
                ProcessLog.logError(ex.Message);
            }
            return(_sourceResults);
        }
Пример #2
0
        private List <CompareResult> ProcessFolder(string fileOrFolder, List <string> otherFiles, CompareDirection direction)
        {
            List <CompareResult> results = new List <CompareResult>();

            try
            {
                string dirName          = '\\' + fileOrFolder.GetCurrentDir();
                string correspondingDir = otherFiles.SingleOrDefault(r => r.IsDirectory() && r.EndsWith(dirName));
                if (correspondingDir != null)
                {
                    List <string> sourceFiles      = FolderLister.GetAllFiles(fileOrFolder);
                    List <string> destinationFiles = FolderLister.GetAllFiles(correspondingDir);

                    if (sourceFiles.Count == 0 && destinationFiles.Count == 0)
                    {
                        results.Add(ProcessEmptyDirectory(fileOrFolder, correspondingDir, direction));
                    }
                    else
                    {
                        foreach (string fileorFolder in destinationFiles)
                        {
                            results.AddRange(ProcessByType(fileorFolder, destinationFiles, direction));
                        }
                    }
                }
                else
                {
                    List <string> files = FolderLister.GetAllFiles(fileOrFolder);

                    if (files.Count > 0)
                    {
                        foreach (var file in files)
                        {
                            results.AddRange(ProcessByType(file, null, direction));
                        }
                    }
                    else
                    {
                        results.Add(ProcessEmptyDirectory(fileOrFolder, string.Empty, direction));
                    }
                }
            }
            catch (Exception ex)
            {
                ProcessLog.logError(ex.Message);
            }

            return(results);
        }
Пример #3
0
        public List <CompareResult> DestinationCompare(string destinationPath, string sourcePath)
        {
            List <CompareResult> _destinationResults = new List <CompareResult>();

            try
            {
                List <string> sourceFiles      = FolderLister.GetAllFiles(sourcePath);
                List <string> destinationFiles = FolderLister.GetAllFiles(destinationPath);

                _worker.ReportProgress(45);

                foreach (string fileOrFolder in destinationFiles)
                {
                    if (fileOrFolder.IsFile())
                    {
                        CompareResult result = ProcessFile(fileOrFolder, sourceFiles, CompareDirection.DESTINATION);
                        if (IsNotPresent(result))
                        {
                            _destinationResults.Add(result);
                        }
                    }
                    else if (BaseInfo.IncludeSubDiretory)
                    {
                        List <CompareResult> results = ProcessFolder(fileOrFolder, sourceFiles, CompareDirection.DESTINATION);
                        _destinationResults.AddRange(GetDestinationOnly(results));
                    }
                }

                _worker.ReportProgress(65);
            }
            catch (Exception ex)
            {
                ProcessLog.logError(ex.Message);
            }
            return(_destinationResults);
        }