示例#1
0
        /// <summary>
        /// Move the specified file to target directroy
        /// </summary>
        /// <param name="sourceFile">Soruce file to move to target directroy</param>
        /// <param name="worker">BackgroundWorker for move</param>
        /// <param name="e">Provides data for the BackgroundWorker</param>
        /// <returns>True if files was moves sucessfull</returns>
        private bool MoveFile(FileInfo sourceFile, BackgroundWorker worker, DoWorkEventArgs e)
        {
            FileInfo TargetFile = new FileInfo(this._target + @"\" + sourceFile.Name);

            try
            {
                if (TargetFile.Exists)
                {
                    HandleExistingFiles.CheckResult HandleFile = HandleExistingFiles.GetOverwriteByAction(sourceFile, TargetFile, Settings.Default.ExistingFile_DateFormat, (HandleExistingFiles.HowToHandleExistingItem)Settings.Default.ExistingFile_Handle, Settings.Default.ExistingFile_AddText, false, out _, this._mainForm);

                    if (HandleFile.FormResult == DialogResult.Cancel)
                    {
                        e.Cancel = true;
                        worker.CancelAsync();
                        return(false);
                    }

                    if (HandleFile.RememberAction)
                    {
                        Settings.Default.ExistingFile_AddText = HandleFile.AddText;
                        Settings.Default.ExistingFile_Handle  = (int)HandleFile.SelectedAction;
                        Settings.Default.Save();

                        this.ExistingFileSettingsChanged?.Invoke(this, new EventArgs());
                    }

                    //Handle overwrite state
                    switch (HandleFile.OverwriteFile)
                    {
                    case HandleExistingFiles.ExistingFile.Exception:
                        this.FileExceptions++;
                        return(false);

                    case HandleExistingFiles.ExistingFile.Overwrite:
                        TargetFile.Delete();
                        break;

                    case HandleExistingFiles.ExistingFile.Rename:
                        //Nothing to do, rename done by "HandleExistingFiles"
                        break;

                    case HandleExistingFiles.ExistingFile.Skip:
                        this.FileSkip++;
                        return(false);
                    }
                }

                // Move file
                System.IO.File.Move(sourceFile.FullName, TargetFile.FullName);
                this.FileMove++;
                return(true);
            }
            catch (Exception ex)
            {
                MessageBox.Show(this._mainForm, string.Format(Stringtable._0x0001m, new object[] { sourceFile.FullName, TargetFile.FullName, ex.Message }), Stringtable._0x0001c, MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.FileExceptions++;
                return(false);
            }
        }
示例#2
0
        /// <summary>
        /// Copya file from target to source
        /// </summary>
        /// <param name="sourceFile">Source file to copy</param>
        /// <param name="targetDirectory">Target directroy for copy the files to</param>
        /// <param name="worker">BackgroundWorker for count</param>
        /// <param name="e">Provides data for the BackgroundWorker</param>
        /// <param name="exception">Exception of the process</param>
        /// <returns>Exception level of the copy process</returns>
        private TaskException.ExceptionLevel CopyFile(FileInfo sourceFile, DirectoryInfo targetDirectory, BackgroundWorker worker, DoWorkEventArgs e, out Exception exception)
        {
            this._progress.FileBytes.ActualValue = 0;
            this._progress.FileBytes.ElemenName  = sourceFile.FullName;
            this._progress.FileBytes.MaxValue    = sourceFile.Length;

            worker.ReportProgress((int)TaskControle.TaskStep.Copy_Busy, new ProgressState(this._progress));

            FileInfo TargetFile = new FileInfo(targetDirectory.FullName + @"\" + sourceFile.Name);

            try
            {
                if (TargetFile.Exists)
                {
                    HandleExistingFiles.CheckResult HandleFile = HandleExistingFiles.GetOverwriteByAction(sourceFile, TargetFile, Properties.Settings.Default.Copy_FileExisitngAddTextDateFormat, this._project.Settings.Common.ExisitingFiles.HandleExistingItem, this._project.Settings.Common.ExisitingFiles.AddTextToExistingFile, false, out exception, this._mainForm);
                    if (HandleFile.FormResult == DialogResult.Cancel)
                    {
                        worker.ReportProgress((int)TaskControle.TaskStep.Cancel, new ProgressState(true));
                        e.Cancel = true;
                        worker.CancelAsync();
                        return(TaskException.ExceptionLevel.NoException);
                    }
                    else if (HandleFile.RememberAction)
                    {
                        this._project.Settings.Common.ExisitingFiles.HandleExistingItem    = HandleFile.SelectedAction;
                        this._project.Settings.Common.ExisitingFiles.AddTextToExistingFile = HandleFile.AddText;
                    }

                    //Handle overwrite state
                    switch (HandleFile.OverwriteFile)
                    {
                    case HandleExistingFiles.ExistingFile.Exception:
                        worker.ReportProgress((int)TaskControle.TaskStep.Copy_Busy, new ProgressState(this._progress));
                        return(TaskException.ExceptionLevel.Medium);

                    case HandleExistingFiles.ExistingFile.Overwrite:
                    case HandleExistingFiles.ExistingFile.Rename:
                        //Nothing speceial to do
                        break;

                    case HandleExistingFiles.ExistingFile.Skip:
                        this._progress.TotalBytes.ActualValue += sourceFile.Length;
                        this._progress.TotalFiles.ActualValue++;
                        worker.ReportProgress((int)TaskControle.TaskStep.Copy_Busy, new ProgressState(this._progress));
                        return(TaskException.ExceptionLevel.NoException);
                    }
                }

                if (!this.CopyFileBufferd(sourceFile, TargetFile, worker, e, out exception))
                {
                    return(this.GetFullDiscExceptionReturnCode(exception, TaskException.ExceptionLevel.Medium));
                }
                else
                {
                    this._progress.TotalFiles.ActualValue++;
                }

                //Report Progress
                worker.ReportProgress((int)TaskControle.TaskStep.Copy_Busy, new ProgressState(this._progress));
                return(TaskException.ExceptionLevel.NoException);
            }
            catch (Exception ex)
            {
                exception = ex;
                TaskException.ExceptionLevel ReturnLevel = this.GetFullDiscExceptionReturnCode(exception, TaskException.ExceptionLevel.Medium);
                TaskException Exception = new TaskException
                {
                    Description = Properties.Stringtable._0x000E,
                    Exception   = ex,
                    Level       = ReturnLevel,
                    Source      = sourceFile.FullName,
                    Target      = TargetFile.FullName
                };
                this._progress.Exception = Exception;
                worker.ReportProgress((int)TaskControle.TaskStep.Exception, new ProgressState(this._progress, true));
                return(ReturnLevel);
            }
        }