private async Task UploadFile(string localFileName, string remoteFileName)
        {
            if (FileHelper.VerifyLongPath(localFileName) || FileHelper.VerifyLongPath(remoteFileName))
            {
                LogHelper.WriteErrorByCurrentMethod("UploadFile 指定的路径或文件名太长,或者两者都太长。完全限定文件名必须少于 260 个字符,并且目录名必须少于 248 个字符。local:{0},remote:{1}".FormatTo(localFileName, remoteFileName));
                return;
            }

            FileStream fileStream;

            try
            {
                fileStream = new FileStream(
                    localFileName,
                    FileMode.Open,
                    FileAccess.Read,
                    FileShare.ReadWrite);
            }
            catch (Exception ex)
            {
                LogHelper.WriteErrorByCurrentMethod(ex);
                return;
            }

            await this.RemoteFileAdapterHandler.UploadFile(new WindowsForFileStream(fileStream),
                                                           remoteFileName, r =>
            {
                TransferMode transferMode = TransferMode.Continuingly;
                if (!_transferMode.HasValue)
                {
                    FileTransferModeForm dlg = new FileTransferModeForm();
                    dlg.TipMessage           = "此远程文件夹已包含一个名为 " + Path.GetFileName(r) + " 的文件";
                    dlg.ShowDialog();
                    transferMode = dlg.TransferModeResult;
                }
                else
                {
                    transferMode = _transferMode.Value;
                }
                return(transferMode);
            });
        }
        private IFileStream ByLocalFileChooseTransferMode(string localFileName)
        {
            IFileStream ifileStream = null;

            if (FileHelper.VerifyLongPath(localFileName))
            {
                LogHelper.WriteErrorByCurrentMethod("localFileName 指定的路径或文件名太长,或者两者都太长。完全限定文件名必须少于 260 个字符,并且目录名必须少于 248 个字符。local:{0}".FormatTo(localFileName));
                return(ifileStream);
            }

            if (!Directory.Exists(Path.GetDirectoryName(localFileName)))
            {
                Directory.CreateDirectory(Path.GetDirectoryName(localFileName));
            }

            long position = 0;

            if (File.Exists(localFileName))
            {
                TransferMode transferMode = TransferMode.Continuingly;
                if (!_transferMode.HasValue)
                {
                    FileTransferModeForm dlg = new FileTransferModeForm();
                    dlg.TipMessage = "此文件夹已包含一个名为 " + Path.GetFileName(localFileName) + " 的文件";
                    dlg.ShowDialog();
                    transferMode = dlg.TransferModeResult;
                }
                else
                {
                    transferMode = _transferMode.Value;
                }

                switch (transferMode)
                {
                case TransferMode.Replace:
                    File.Delete(localFileName);
                    break;

                case TransferMode.ReplaceAll:
                    File.Delete(localFileName);
                    _transferMode = TransferMode.Replace;
                    break;

                case TransferMode.Continuingly:
                    position = new FileInfo(localFileName).Length;
                    break;

                case TransferMode.ContinuinglyAll:
                    position      = new FileInfo(localFileName).Length;
                    _transferMode = TransferMode.Continuingly;
                    break;

                case TransferMode.JumpOver:
                    return(ifileStream);   //跳过本次

                case TransferMode.Cancel:
                    _transferMode = transferMode;
                    return(ifileStream);

                default:
                    break;
                }
            }
            FileStream fileStream;

            try
            {
                fileStream = new FileStream(
                    localFileName,
                    FileMode.OpenOrCreate,
                    FileAccess.ReadWrite,
                    FileShare.ReadWrite);
                fileStream.Position = position;//从断点写入
            }
            catch (Exception ex)
            {
                LogHelper.WriteErrorByCurrentMethod("打开本地文件失败," + ex.Message);
                return(ifileStream);
            }
            return(new WindowsForFileStream(fileStream));
        }