使用 WinSCP .NET Assembly 防止超过 FTP 的不完整文件传输

Prevent incomplete file transfer over FTP using WinSCP .NET Assembly

我只是想使用 windows 服务[=23=将文本文件从一个 FTP 服务器传输到另一个服务器].我从源 FTP 服务器下载所需的文件并将其保存在我的本地系统上,然后将保存的文件上传到目标服务器。我使用 WinSCP .Net Assembly 下载和上传文件。这是我用来将文件传输到目标服务器的代码:

WinSCP.SessionOptions sessionOptions = new WinSCP.SessionOptions();
sessionOptions.Protocol = WinSCP.Protocol.Ftp;
sessionOptions.UserName = "myUsername";
sessionOptions.Password = "myPassword"
sessionOptions.PortNumber = 21;
sessionOptions.HostName = serverIPAddress;

session.Open(sessionOptions);

WinSCP.TransferOptions transferOptions = new WinSCP.TransferOptions();
transferOptions.TransferMode = WinSCP.TransferMode.Binary;
WinSCP.TransferOperationResult transferResult;
transferResult = session.PutFiles(PathToLocalFile + filename, destinationFilePath, false, transferOptions);
transferResult.Check();

它工作正常并将文件上传到服务器,但如果在传输文件时出现连接问题,则将不完整的所需文件块传输到目标服务器。

我已经搜索了 WinSCP 官方文档,但找不到与此相关的内容。

有没有办法确保只有完整的文件被传输到目的地,否则(如果传输过程中发生错误),传输的文件块会被自动删除? (无需手动删除不完整的文件)

没有办法让它自动进行。

你必须编码。只是检查,如果传输失败,重新连接(如果需要),并删除部分上传的文件。

虽然在评论中已经提到,如果传输失败,由于连接问题,您可能无法重新连接以删除文件。

没有灵丹妙药。服务器应该能够首先处理部分文件。

另请参阅:

  • (虽然看似不同的主题,但检测文件是否 正在上传 基本上是同一件事,因为检测文件是否尚未 已上传完整)
  • File upload with WinSCP .NET/COM with temporary filenames