Delphi-使用TMagFtp组件恢复文件上载
我正在使用TMagFtp组件,该组件又是使用OveByte的ICS组件集作为基础构建的,用于将文件上载到FTP服务器 以下是我正在使用的代码:Delphi-使用TMagFtp组件恢复文件上载,delphi,ftp,Delphi,Ftp,我正在使用TMagFtp组件,该组件又是使用OveByte的ICS组件集作为基础构建的,用于将文件上载到FTP服务器 以下是我正在使用的代码: Replace := FCReplDiff; taskres := MagFTPClient.FtpLogon; if taskres = TaskResOKNew then begin for I := 1 to lstFiles.Count - 1 do begin UploadFileName := lstFile
Replace := FCReplDiff;
taskres := MagFTPClient.FtpLogon;
if taskres = TaskResOKNew then
begin
for I := 1 to lstFiles.Count - 1 do
begin
UploadFileName := lstFiles.Items[I];
UploadFileName := ExtractFileName(UploadFileName);
taskres := MagFTPClient.FtpUpOneFile(ProjectFolderPath + UploadFileName, '/jobs/' + ProjectFolderName, ExtractFileName(UploadFileName), Replace);
if (taskres = TaskResFail) then
begin
ShowMessage('Upload Failed' + #13 + GetTaskResName(taskres) + #13 + GetExceptMess(ExceptObject));
UploadFailed := True;
Exit;
end;
end;
end;
一旦上传了文件,我重复上传过程,它就会重新上传文件。实际上,它应该跳过该文件。有问题的FTP服务器支持恢复。我和菲莉齐拉查过了
我不明白为什么?的
Replopt
参数
TMagFtp.FtpUpOneFile(const LocFileFull, RemTarDir, RemTarFile: string; Replopt: TFileCopyRepl): TTaskResult;
采用以下值之一:
TFileCopyRepl = (FCReplNever, FCReplAlways, FCReplDiff, FCReplNewer) ;
使用FCReplNever
可能永远不会替换现有文件
编辑 从源代码看,似乎
FCReplDiff
意味着如果文件大小不同或其时间戳的差异超过默认值为2秒的AllowDiffDT
,则可以替换该文件。FTP服务器可能是在不同的时区下运行的,尤其是在不同国家/地区的不同时间发生DST更改时,服务器上的文件时间会报告为不同的时间,即使是在第一次上载之前
编辑2 你问题中的信息无法评估上述关于时间差异的理论。因此,为了验证,在第4507行上放置一个断点
flag := MagCheckReplace (replopt, true, OneSecond * 2, SrcFSize, RFSize,
SrcFileUDT, RFileUDT) ;
在MagentaFtp.pas中,检查
SrcFileUDT
和RFileUDT
的值。同时进入MagCheckReplace()
函数查看它为什么允许替换。FCReplDiff到底是什么意思?它是一个参数,告诉MagFTP只上载大小与目标文件不同的文件。另一个我观察到在Windows 8上上载失败。为什么?我在回答中添加了一些调试说明,我相信我已经回答了您的问题问题。关于Windows 8上的故障是另一个问题,因为它与此无关。