/// <summary>
        /// Delete local (source) files that do not exist in the destination.
        /// </summary>
        private bool DeleteLocalGhostFiles()
        {
            Logger.WriteLog(ErrorCodes.SyncPhase_DeletionBegun2,
                            ErrorResources.SyncPhase_DeletionBegun, Severity.Information, VerboseLevel.User, true);

            DiscoveredObject[] files = Destination.GetObjects();

            for (int i = 0; i < files.Length; i++)
            {
                ScanProgress(i, files.Length, files[i].FullName);

                if (files[i].Kind == ObjectKind.File)
                {
                    string gcsObject = Helpers.RemoveSecExt(files[i].FullName);

                    if (!ObjectExists(gcsObject))
                    {
                        if (Destination.Delete(gcsObject, _wideDisplay))
                        {
                            Interlocked.Increment(ref _deletedCount);
                        }
                        else
                        {
                            Interlocked.Increment(ref _errorCount);
                        }
                    }
                }
                else if (files[i].Kind == ObjectKind.Directory)
                {
                    if (!Destination.AfterDirectoryScan(files[i].FullName, _wideDisplay))
                    {
                        Interlocked.Increment(ref _errorCount);
                    }
                }
                else
                {
                    throw new SmkException($"Unsupported type for {files[i].GetType().Name}.{files[i].Kind}");
                }
            }

            Logger.WriteLog(ErrorCodes.SyncPhase_DeletionEnded2,
                            ErrorResources.SyncPhase_DeletionEnded, Severity.Information, VerboseLevel.User, true);

            return(_errorCount == 0);
        }
        /// <summary>
        /// Delete local (source) files that do not exist in the destination.
        /// </summary>
        private bool DeleteLocalGhostFiles()
        {
            Logger.WriteLog(ErrorCodes.SyncPhase_DeletionBegun,
                            ErrorResources.SyncPhase_DeletionBegun, Severity.Information, VerboseLevel.User, true);

            DiscoveredObject[] files      = Destination.GetObjects();
            string             currentDir = null;

            for (int i = 0; i < files.Length; i++)
            {
                string localFile = $"{_path}{files[i].FullName}";

                ScanProgress(i, files.Length, localFile);

                if (files[i].Kind == ObjectKind.File)
                {
                    if ((Transform != null) && (Transform.IsSecured))
                    {
                        localFile = Helpers.RemoveSecExt(localFile);
                    }
                    else if ((Transform != null) && (!Transform.IsSecured))
                    {
                        localFile = $"{localFile}{Constants.EncryptedExt}";
                    }

                    if (!File.Exists(localFile))
                    {
                        if (Destination.Delete(files[i].FullName, _wideDisplay))
                        {
                            Interlocked.Increment(ref _deletedCount);
                        }
                        else
                        {
                            Interlocked.Increment(ref _errorCount);
                        }
                    }

                    if ((currentDir == null) && (currentDir != files[i].DirectoryName))
                    {
                        if ((currentDir != null) && !Destination.AfterDirectoryScan(currentDir, _wideDisplay))
                        {
                            Interlocked.Increment(ref _errorCount);
                        }

                        currentDir = files[i].DirectoryName;
                    }
                }
                else if (files[i].Kind == ObjectKind.Directory)
                {
                    if (!Destination.AfterDirectoryScan(files[i].FullName, _wideDisplay))
                    {
                        Interlocked.Increment(ref _errorCount);
                    }
                }
                else
                {
                    throw new SmkException($"Unsupported type for {files[i].GetType().Name}.{files[i].Kind}");
                }
            }

            Logger.WriteLog(ErrorCodes.SyncPhase_DeletionEnded,
                            ErrorResources.SyncPhase_DeletionEnded, Severity.Information, VerboseLevel.User, true);

            return(_errorCount == 0);
        }