private void Rename(string sourceFileName, string destFileName, CopyOptions copyOptions)
        {
            if (File.Exists(destFileName))
            {
                var sourceFileInfo = new FileInfo(sourceFileName);
                var destFileInfo   = new FileInfo(destFileName);
                var comparer       = new FileDateComparer(sourceFileInfo, destFileInfo, copyOptions.CompareDateOptions);

                var renamedFilename = GetCountedUpExtension(destFileName);


                switch (copyOptions.CopyStrategy)
                {
                default:
                    throw new NotSupportedException();

                case CopyStrategy.RenameNew:
                    RenameNew(sourceFileName, destFileName, comparer, renamedFilename);
                    break;

                case CopyStrategy.RenameOld:
                    RenameOld(sourceFileName, destFileName, comparer, renamedFilename);
                    break;
                }
            }
            else
            {
                File.Copy(sourceFileName, destFileName);
            }
        }
        private void RenameNew(string sourceFileName, string destFileName, FileDateComparer comparer, string renamedFilename)
        {
            var destFileInfo = new FileInfo(destFileName);

            if (comparer.NewFile.FullName == destFileInfo.FullName)
            {
                File.Move(destFileName, renamedFilename);
                File.Copy(sourceFileName, destFileName);
            }
            else if (comparer.OldFile.FullName == destFileInfo.FullName)
            {
                File.Copy(sourceFileName, renamedFilename);
            }
        }
        private void RenameOld(string sourceFileName, string destFileName, FileDateComparer comparer, string renamedFilename)
        {
            var destFileInfo = new FileInfo(destFileName);

            if (comparer.OldFile.FullName == destFileInfo.FullName)
            {
                logger.LogDebug("RenameOldMove | Move {0} to {1}", destFileName, renamedFilename);
                logger.LogDebug("RenameOldMove | Copy {0} to {1}", sourceFileName, destFileName);
                File.Move(destFileName, renamedFilename);
                File.Copy(sourceFileName, destFileName);
            }
            else if (comparer.NewFile.FullName == destFileInfo.FullName)
            {
                logger.LogDebug("RenameOldCopy | Copy {0} to {1}", sourceFileName, renamedFilename);
                File.Copy(sourceFileName, renamedFilename);
            }
        }