求用多线程实现ftp下载的例子

解决方案 »

  1.   

    unit Unit2;interfaceuses
      Classes, SysUtils, Windows, Forms, NMFTP;Type
      TFtpDown = Class(TThread)
      private
        FAddr:String;
        FRemotePath:String;
        FLocalFile:String;
        FRemoteFile:String;
        FUser:String;
        FPswd:String;
        FPort:Integer;
        FTimeout:Integer;
        FNMFTP: TNMFTP;
      protected
        Procedure Execute;override;
      Public
        Constructor Create(sAddr,sRemotePath,sRemoteFile,sLocalFile,
                    sUser,sPswd:String; iPort,iTimeout:Integer);
      end;Procedure FtpDown(sAddr,sRemotePath,sRemoteFile,sLocalFile,sUser,sPswd:String;
                      iPort,iTimeout:Integer);
    //用线程下载指定的FTP文件
    //sAddr:服务器的地址
    //sRemotePath:远程服务器的文件路径
    //sRemoteFile:要下载的文件,注意,文件名区分大小写
    //sLocalFile:本地文件名称
    //sUser:帐号
    //sPswd:密码
    //iPort:服务器所用的端口
    //iTimeOut:超时时间,单位:秒
    //调用例子:FtpDown('192.168.0.1','/','test.txt','c:\test.txt','user','pswd',21,300);implementationProcedure FtpDown(sAddr,sRemotePath,sRemoteFile,sLocalFile,sUser,sPswd:String;
             iPort,iTimeout:Integer);
    begin
      TFtpDown.Create(sAddr,sRemotePath,sRemoteFile,sLocalFile,sUser,sPswd,iPort,iTimeout);
    end;{ TFtpDown }constructor TFtpDown.Create(sAddr,sRemotePath,sRemoteFile,sLocalFile,
                sUser,sPswd:String; iPort,iTimeout:Integer);
    begin
      Inherited Create(true);  FAddr:=sAddr;
      FRemotePath:=sRemotePath;
      FLocalFile:=Trim(sLocalFile);
      FRemoteFile:=sRemoteFile;
      FUser:=sUser;
      FPswd:=sPswd;
      FPort:=iPort;
      FTimeout:=iTimeout;
      FNMFTP:=TNMFTP.Create(nil);
      FreeOnTerminate:=true;  Resume;
    end;procedure TFtpDown.Execute;
    begin
      try
        FNMFTP.Host:=FAddr;
        FNMFTP.UserID:=FUser;
        FNMFTP.Password:=FPswd;
        FNMFTP.Port:=FPort;
        FNMFTP.TimeOut:=FTimeout*1000;
        try
          FNMFTP.Connect;
          if FRemotePath>'' then
            FNMFtp.ChangeDir(FRemotePath);
          FNMFtp.Mode(Mode_Byte);
          FNMFTP.Download(FRemoteFile,FLocalFile);
          FNMFTP.Disconnect;
        except
        end;
      finally
        FNMFTP.Free;
      end;
    end;end.