Error handling 使用FTP“;附加“;命令

Error handling 使用FTP“;附加“;命令,error-handling,ftp,append,Error Handling,Ftp,Append,我想以编程方式(C++)将文件上载到ftp服务器。如果上传文件时连接丢失,我不想从头上传文件,只想上传我没有发送的部分 APPE司令部满足我的要求了吗?我应该使用哪些FTP命令?以及如何执行?检查,特别是APPEND命令: 这个 命令使服务器DTP 接受通过网络传输的数据 数据连接并存储数据 在服务器站点的文件中。如果 路径名中指定的文件存在 在服务器站点上,然后 应附于该文件之后; 否则,在 路径名应在以下位置创建: 服务器站点 请注意,您不能简单地再次附加相同的文件。您应该发送剩余的字节。也

我想以编程方式(C++)将文件上载到ftp服务器。如果上传文件时连接丢失,我不想从头上传文件,只想上传我没有发送的部分

APPE司令部满足我的要求了吗?我应该使用哪些FTP命令?以及如何执行?

检查,特别是
APPEND
命令:

这个 命令使服务器DTP 接受通过网络传输的数据 数据连接并存储数据 在服务器站点的文件中。如果 路径名中指定的文件存在 在服务器站点上,然后 应附于该文件之后; 否则,在 路径名应在以下位置创建: 服务器站点


请注意,您不能简单地再次附加相同的文件。您应该发送剩余的字节。也就是说,当连接断开时,在相同的位置继续操作。

我在谷歌上搜索APPE FTP命令的详细信息,它实际上是做什么的,但大多数站点只声明append。然后,我尝试该命令,以确保其行为符合预期

我正在设计FTP自动发送器,用于将日志文件从计算机发送到服务器以进行报告。我只想发送日志文件的最后一行

当使用APPE命令时,它实际上会附加整个文件内容并附加到服务器中现有的文件内容。这将导致行条目重复

答案是: 如果最后一次传输失败,要恢复文件,没有这样的命令,但我们需要使用一系列命令来实现它

这里的关键点是,如果使用APPE命令或REST命令,请将本地文件搜索到最后上载的字节。REST将在该特定字节开始位置开始传输。我最终使用此解决方案在建立连接后执行:

使用APPE(我从FileZilla日志中得到了这个想法):

  • 使用“大小”检查文件是否存在,并将其用作恢复标记
  • 打开本地文件系统并在标记上查找
  • 使用APPE上传,FTP服务器将自动追加
  • 将STOR与REST一起使用(我从edtFTPnet获得了这个想法):

  • 使用“大小”检查文件是否存在,并将其用作恢复标记
  • 发送REST以及从SIZE获得的结果,以通知FTP服务器开始在该位置上写入
  • 打开本地文件系统并在标记上查找
  • 使用STOR作为正常上传
  • 请注意,并非所有FTP服务器都支持双向传输。我看到FileZilla根据服务器的不同进行双向切换。我的观察表明,使用REST是标准的方法。下载还可以使用REST在给定的字节位置开始下载

    请记住,对ASCII传输类型使用恢复支持将产生意外的结果,因为Unix和Windows具有不同的换行字节计数

    尝试操纵FileZilla以查看日志中的行为。 您还可以查看这个有用的开源FTP for.NET库,了解它们是如何实现的。