Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi-使用TMagFtp组件恢复文件上载_Delphi_Ftp - Fatal编程技术网

Delphi-使用TMagFtp组件恢复文件上载

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

我正在使用TMagFtp组件,该组件又是使用OveByte的ICS组件集作为基础构建的,用于将文件上载到FTP服务器

以下是我正在使用的代码:

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上的故障是另一个问题,因为它与此无关。