public static CheckResult GetOverwriteByAction(FileInfo sourceFile, FileInfo targetFile, string dateFormat, HowToHandleExistingItem defaultAction, string defaultAddText, bool defaultRemember, out Exception exception, Form parent)
        {
            exception = null;
            CheckResult CheckResult = new CheckResult
            {
                FormResult     = DialogResult.OK,
                OverwriteFile  = ExistingFile.Exception,
                AddText        = defaultAddText,
                RememberAction = defaultRemember,
                SelectedAction = defaultAction
            };

            // Open Form, if action is ask what to do
            if (defaultAction == HowToHandleExistingItem.AskAnyTime)
            {
                HandleExistingFilesForm HandleExistingFilesForm = new HandleExistingFilesForm(HandleExistingFilesForm.FormMode.FileExists, sourceFile, targetFile, defaultAction, defaultAddText, defaultRemember);
                DialogResult            FormResult; // = HandleExistingFilesForm.ShowDialog(parentForm);

                if (parent != null)
                {
                    // Show form modal to parent form, invoke
                    FormResult = (DialogResult)parent.Invoke((Func <DialogResult>)(() => HandleExistingFilesForm.ShowDialog()));
                }
                else
                {
                    // Show form with no parent form
                    FormResult = HandleExistingFilesForm.ShowDialog();
                }

                CheckResult.FormResult     = FormResult;
                CheckResult.AddText        = HandleExistingFilesForm.ActionAddTextText;
                CheckResult.RememberAction = HandleExistingFilesForm.RememberActionHandleExistingFiles;
                CheckResult.SelectedAction = HandleExistingFilesForm.ActionHandleExistingFiles;

                if (FormResult == DialogResult.Cancel)
                {
                    return(CheckResult);
                }
            }

            CheckResult.OverwriteFile = GetOverwriteByAction(sourceFile, targetFile, dateFormat, CheckResult.SelectedAction, CheckResult.AddText, out exception);
            return(CheckResult);
        }
        /// <summary>
        /// Gets how if the existing file should been overwritten, by selected action
        /// </summary>
        /// <param name="sourceFile">Source file to copy</param>
        /// <param name="targetFile">Target file to copy the data to</param>
        /// <param name="dateFormat">Date format for adding date text to exisiting file</param>
        /// <param name="action">Action, how to handle exisitng files</param>
        /// <param name="addText">Text to add to existing files</param>
        /// <param name="exception">Exception while handle existing file</param>
        /// <returns>Should the exisiting file been overwritten, was renamend or occourded an exception</returns>
        private static ExistingFile GetOverwriteByAction(FileInfo sourceFile, FileInfo targetFile, string dateFormat, HowToHandleExistingItem action, string addText, out Exception exception)
        {
            exception = null;

            switch (action)
            {
            case HowToHandleExistingItem.AddText:
                return(TargetAddText(targetFile, dateFormat, addText, out exception));

            case HowToHandleExistingItem.AskAnyTime:
                throw new ArgumentException("HandleExistingFiles->GetOverwriteByAction->Invalid value", nameof(action));

            case HowToHandleExistingItem.OverwriteAll:
                return(TargetOverwrite());

            case HowToHandleExistingItem.OverwriteIfDifferentLength:
                return(SourceDifferentLength(sourceFile, targetFile));

            case HowToHandleExistingItem.OverwriteIfDifferentLengthOrNewer:
                return(SourceDifferentLengthOrNewer(sourceFile, targetFile));

            case HowToHandleExistingItem.OverwriteIfNewer:
                return(SourceNewer(sourceFile, targetFile));

            case HowToHandleExistingItem.Skipp:
                return(SourceSkip());

            default:
                throw new ArgumentException("HandleExistingFiles->GetOverwriteByAction->Invalid value", nameof(action));
            }
        }
 /// <summary>
 /// Gets how to handle existing files. Show form to ask how to handle, if necessary
 /// </summary>
 /// <param name="sourceFile">Source file to copy</param>
 /// <param name="targetFile">Target file to copy the data to</param>
 /// <param name="dateFormat">Date format for adding date text to exisiting file</param>
 /// <param name="defaultAction">Pre defined action, how to handle exisitng files</param>
 /// <param name="defaultAddText">Default text to add to existing files</param>
 /// <param name="defaultRemember">Default state of remember action CheckBox</param>
 /// <param name="exception">Exception while handle existing file</param>
 /// <returns>Should the exisiting file been overwritten, was renamend or occourded an exception</returns>
 public static CheckResult GetOverwriteByAction(FileInfo sourceFile, FileInfo targetFile, string dateFormat, HowToHandleExistingItem defaultAction, string defaultAddText, bool defaultRemember, out Exception exception)
 {
     return(GetOverwriteByAction(sourceFile, targetFile, dateFormat, defaultAction, defaultAddText, defaultRemember, out exception, null));
 }