コード例 #1
0
        private void ActionDelete(FileExtended sourceFileExtended, FileExtended destFileExtended,
                                  Direction actionDirection)
        {
            FileExtended fileToDelete = null;

            switch (actionDirection)
            {
            case Direction.SourceToDestination:
                fileToDelete = destFileExtended;
                FileMappingFromCsv.Remove(destFileExtended);
                break;

            case Direction.DestinationToSource:
                fileToDelete = sourceFileExtended;
                FileMappingFromCsv.Remove(sourceFileExtended);
                break;
            }

            if (fileToDelete != null)
            {
                string pathForArchival = Path.Combine(SyncConfig.Parameters["ArchiveFolder"], DateTime.Now.ToString("yyyy-MM-dd"));
                string logFile         = SyncConfig.SyncLog;
                WorkingWithFiles.ArchiveFile(fileToDelete, logFile, pathForArchival, "deletion");
            }
        }
コード例 #2
0
        private static void CleanupDuplicateFiles(List <FileExtended> duplFiles, FileType fileType,
                                                  SyncExecution syncExec)
        {
            var    currentStep   = 0;
            string syncLog       = syncExec.SyncConfig.SyncLog;
            string archiveFolder = syncExec.SyncConfig.Parameters["ArchiveFolder"];
            var    filesList     = fileType == FileType.Source ? syncExec.SourceFiles : syncExec.DestFiles;

            var duplValues = duplFiles
                             .Select(x => x.FileNameAndSize)
                             .Distinct()
                             .ToList();

            foreach (var v in duplValues)
            {
                var tempFiles = duplFiles.FindAll(x => x.FileNameAndSize == v);
                while (tempFiles.Count > 1)
                {
                    int lastInd  = tempFiles.Count - 1;
                    var lastFile = tempFiles[lastInd];

                    tempFiles.Remove(lastFile);
                    duplFiles.Remove(lastFile);
                    filesList.Remove(lastFile.fileID);
                    WorkingWithFiles.ArchiveFile(lastFile, syncLog, archiveFolder, "duplicate");
                    currentStep++;
                    Init.DisplayCompletionInfo("files processed",
                                               currentStep, duplFiles.Count - duplValues.Count + currentStep);
                }
            }
            Console.Write("\rDone.                                                                ");
        }
コード例 #3
0
        public void AppendActionListWithDeleteRenameMove(FileExtended firstFileExtended, FileExtended secondFileExtended,
                                                         CsvRow row)
        {
            var filePairAction = new FilePairAction(firstFileExtended, secondFileExtended);



            FileExtended sourceFile = WorkingWithFiles.GetSourceAndDestFile(firstFileExtended, secondFileExtended)[FileType.Source];
            FileExtended destFile   = WorkingWithFiles.GetSourceAndDestFile(firstFileExtended, secondFileExtended)[FileType.Destination];

            // handle deletions
            bool deletion = IdentifyDeletion(sourceFile, destFile, filePairAction);

            if (deletion)
            {
                //_actionList.Add(filePairAction);
                return;
            }

            // handle renaming and moving
            var oldFirstFileType     = (FileType)Enum.Parse(typeof(FileType), row[0]);
            var oldFirstBasePath     = row[1];
            var oldFirstFileFullPath = row[2];
            var oldFirstFileId       = row[3];
            var oldFirstFile         = new FileExtended(oldFirstFileType, oldFirstBasePath, oldFirstFileFullPath, oldFirstFileId);

            var oldSecondFileType     = (FileType)Enum.Parse(typeof(FileType), row[4]);
            var oldSecondBasePath     = row[5];
            var oldSecondFileFullPath = row[6];
            var oldSecondFileId       = row[7];
            var oldSecondFile         = new FileExtended(oldSecondFileType, oldSecondBasePath, oldSecondFileFullPath,
                                                         oldSecondFileId);

            var oldSourceFile = oldFirstFileType == FileType.Source ? oldFirstFile : oldSecondFile;
            var oldDestFile   = oldSecondFileType == FileType.Destination ? oldSecondFile : oldFirstFile;


            IdentifyRenameMove(sourceFile, oldSourceFile, destFile, oldDestFile, filePairAction);
            if (filePairAction.ActionType == ActionType.RenameMove
                ||
                filePairAction.ActionType == ActionType.Rename
                ||
                filePairAction.ActionType == ActionType.Move
                // ||
                //filePairAction.ActionType == ActionType.Delete
                )
            {
                AddFilePairWithCheck(filePairAction);
            }
        }
コード例 #4
0
        public static void InitializeFiles(SyncExecution syncExec)
        {
            Console.WriteLine("\n");
            Console.WriteLine("Fetching source and destination files...");

            var folderMappings   = syncExec.SyncConfig.FolderMappings;
            var watchInitFiles   = new Stopwatch();
            var watchSourceFiles = new Stopwatch();
            var watchDestFiles   = new Stopwatch();

            var sourceFilesTemp = new List <string>();
            var destFilesTemp   = new List <string>();

            watchInitFiles.Start();


            foreach (var pair in folderMappings)
            {
                WorkingWithFiles.GetFiles(pair.Value.Item1, sourceFilesTemp);
                WorkingWithFiles.GetFiles(pair.Value.Item2, destFilesTemp);
            }

            _totalSourceFilesCount = sourceFilesTemp.Count;
            _totalDestFilesCount   = destFilesTemp.Count;

            Console.WriteLine("Source files:      " + _totalSourceFilesCount);
            Console.WriteLine("Destination Files: " + _totalDestFilesCount);

            Console.WriteLine("Populating source files list...");

            foreach (var pair in folderMappings)
            {
                PopulateSourceFiles(syncExec, pair.Value.Item1, sourceFilesTemp);
            }

            Console.WriteLine("\rDone.                                                                      ");
            Console.WriteLine("Populating destination files list...");
            foreach (var pair in folderMappings)
            {
                PopulateDestFiles(syncExec, pair.Value.Item2, destFilesTemp);
            }



            Console.WriteLine("\rDone.                                                                      ");
            Console.WriteLine($"Elapsed time: {FormatTime(watchInitFiles.ElapsedMilliseconds)}");
        }
コード例 #5
0
        private void CalculateSpaceNeeded()
        {
            long sourceDeletionSize = 0; // B
            long sourceCreationSize = 0;
            long destDeletionSize   = 0;
            long destCreationSize   = 0;

            var creationsAndDeletions =
                ActionsList.FindAll(x => x.ActionType == ActionType.Create
                                    //|| x.ActionType == ActionType.Delete
                                    );

            foreach (var action in creationsAndDeletions)
            {
                var files      = WorkingWithFiles.GetSourceAndDestFile(action.File1, action.File2);
                var sourceFile = files[FileType.Source];
                var destFile   = files[FileType.Destination];

                if (action.ActionType == ActionType.Create)
                {
                    if (action.ActionDirection == Direction.SourceToDestination)
                    {
                        destCreationSize += sourceFile.FileSize;
                    }
                    else
                    {
                        sourceCreationSize += destFile.FileSize;
                    }
                }

                //if (action.ActionType == ActionType.Delete)
                //{
                //    if (action.ActionDirection == Direction.SourceToDestination)
                //    {
                //        destDeletionSize += destFile.FileSize;
                //    }
                //    else
                //    {
                //        sourceDeletionSize += sourceFile.FileSize;
                //    }
                //}
            }

            _spaceNeededInSource      = (int)Math.Round((double)(sourceCreationSize - sourceDeletionSize) / (1024 * 1024));
            _spaceNeededInDestination = (int)Math.Round((double)(destCreationSize - destDeletionSize) / (1024 * 1024));
        }
コード例 #6
0
        public void PerformActions()
        {
            Console.WriteLine();
            var actionsToPerform = _actionList.FindAll(x => x.ActionType != ActionType.None);

            if (actionsToPerform.Count == 0)
            {
                Console.WriteLine("No changes have been detected - no actions needed");
                return;
            }

            var syncWatch = new Stopwatch();

            syncWatch.Start();


            Console.WriteLine("Starting synchronization....");
            foreach (var action in actionsToPerform)
            {
                var          filesDict  = WorkingWithFiles.GetSourceAndDestFile(action.File1, action.File2);
                FileExtended sourceFile = filesDict[FileType.Source];
                FileExtended destFile   = filesDict[FileType.Destination];


                try
                {
                    switch (action.ActionType)
                    {
                    case ActionType.Create:
                        var creatingFileOp = action.ActionDirection == Direction.SourceToDestination
                                ? sourceFile.fullPath
                                : destFile.fullPath;
                        DisplaySyncProcessStats("Copying file " + creatingFileOp);
                        ActionCreate(sourceFile, destFile, action.ActionDirection);
                        _filesCreated++;

                        //Init.DisplayCompletionInfo("actions performed",
                        //    _filesCreated + _filesDeleted + _filesMoved + _filesRenamed + _filesRenamedMoved + _filesUpdated,
                        //    ActionsList.Count);
                        break;

                    case ActionType.Update:
                        var updatingFile = action.ActionDirection == Direction.SourceToDestination
                                ? destFile.fullPath
                                : sourceFile.fullPath;
                        DisplaySyncProcessStats("Updating file " + updatingFile);
                        ActionUpdate(sourceFile, destFile, action.ActionDirection);
                        _filesUpdated++;

                        break;

                    case ActionType.RenameMove:
                        var movingFile = action.ActionDirection == Direction.SourceToDestination
                                ? destFile.fullPath
                                : sourceFile.fullPath;
                        DisplaySyncProcessStats("Renaming and moving file " + movingFile);
                        ActionRenameMove(sourceFile, destFile, action.ActionDirection);
                        _filesRenamedMoved++;

                        break;

                    case ActionType.Rename:
                        var renamingFile = action.ActionDirection == Direction.SourceToDestination
                                ? destFile.fullPath
                                : sourceFile.fullPath;
                        DisplaySyncProcessStats("Renaming file " + renamingFile);
                        ActionRenameMove(sourceFile, destFile, action.ActionDirection);
                        _filesRenamed++;

                        break;

                    case ActionType.Move:
                        var movingFile2 = action.ActionDirection == Direction.SourceToDestination
                                ? destFile.fullPath
                                : sourceFile.fullPath;
                        DisplaySyncProcessStats("Renaming and moving file " + movingFile2);
                        ActionRenameMove(sourceFile, destFile, action.ActionDirection);
                        _filesMoved++;

                        break;

                        //case ActionType.Delete:
                        //    var archivingFile = action.ActionDirection == Direction.SourceToDestination
                        //        ? destFile.fullPath
                        //        : sourceFile.fullPath;
                        //    DisplaySyncProcessStats("Archiving file " + archivingFile);
                        //    ActionDelete(sourceFile, destFile, action.ActionDirection);
                        //    _filesDeleted++;

                        //    break;
                    }
                    action.SyncSuccess = true;
                }
                catch (Exception ex)
                {
                    action.SyncSuccess      = false;
                    action.ExceptionMessage = ex.Message;
                    _failedActions.Add(action);
                }
            }
            syncWatch.Stop();

            Console.WriteLine("\n\nSynchronization complete! Elapsed time: "
                              + Init.FormatTime(syncWatch.ElapsedMilliseconds));
        }