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)); }