NMFTP是Delphi、Borland C++ Builder(以下简称BCB)自带的FastNet控件组中的一个组件,主要用于实现FTP上传、下载等功能。它在开发一些小型、简单的网络应用软件时非常有用。笔者最近在使用BCB6开发一套FTP客户端软件时需要实现断点上(续)传(以下用"断点续传"特指断点上(续)传),最终通过NMFTP得以实现,在此将问题解决过程写出来,与广大程序员共飨。 一、系统函数假续传 用过NMFTP的朋友都知道,NMFTP有三个上传函数可以满足绝大部分的上传操作。它们分别是:Upload()、UploadAppend()、UploadRestore()、UploadUnique(),这四个函数的原型为: procedure Upload(LocalFile, Remote File: string); procedure UploadAppend(LocalFile, RemoteFile: string); procedure UploadRestore(LocalFile, RemoteFile: string; Position: Integer); procedure UploadUnique(LocalFile: string); 笔者的软件要求在FTP服务器不授予"删除"权限的条件下完成文件传输,且上传的文件要与本地文件同名。tW.wIngwiT.CoM因此断点续传是解决问题的唯一途径。通过帮助文档可以知道,UploadRestore()、UploadAppend()两个函数都能满足要求,两者唯一不同之处在于前者需要指定断点位置,而后者自动将文件接续在已上传的文件后(服务器上文件名需要与"RemoteFile"参数指定的文件名相同)。 实际使用过程中,发现两者确实都可以完成续传的目的,但是直接使用这两个函数完成续传以后的文件无法使用,而文件大小是续传前的大小与原文件大小之和,也就是说,这两个函数完成的"续传"是把文件从前次断点处重新从头传了一遍,而并没有真正的从断点处"续传"。 |