在以前的帖子中有这样的FTP下载的方法
定义:
Function DoFileDownload(lpszFile:Widestring):longint; stdcall; external 'shdocvw.dll';调用:
DoFileDownload('ftp://10.73.18.49/FTP专用\0\Video\XXX.exe');这样是很简单,但是这样会弹出对话框,让用户选择文件保存的路径。我想不让它弹出选择保存路径的对话框,保存路径自己填写,保存的文件名称也自己填写,这个函数调用是否能实现,有没有哪位能解决。如果这个函数不能实现我的要求,希望大侠给个FTP下载的好方法:
要求:
1,要下载的文件名称由用户传递过去(服务器那边已经存在的文件);
2,下载的文件保存的名称程序里面定义,不让用户自己定义;
3,下载的文件的保存路径程序里面设定好,不让用户自己定义;
4,下载的速度能和上面的函数一样快;

解决方案 »

  1.   

    用WinInet里面的FtpGetFile试试看
      

  2.   

    用Indy控件里的IDFTP控件,很简单的.
    function TFrmFtpDownload.FtpGetFile(Source, Target: string): boolean;
    begin
      result := false;
      try
        try
          IdFTP1.Connect;
          try
            IDFtp1.Get(Source, Target, true);
            result := true;
          except
            if not NoIndyError then ShowMessage('下载文件出错!');
          end;
        except
          if not NoIndyError then ShowMessage('连接服务器出错!');
        end;
      finally
        IdFTP1.Disconnect;
      end;
    end;
      

  3.   

    为何不使用indy呢?
    呵呵_____________________
    http://lysoft.7u7.net
      

  4.   

    to:superyys(无血野人)
    我试过你那段代码,下载的时候,硬盘还是吱吱的响,而且没有我问题中讲的那方法快,那方法最起码硬盘不响。能有更快的方法吗?要的就是速度,希望大家帮忙!
      

  5.   

    to:superyys(无血野人)
    我仔细测试了下时间,用你的ftp代码下载644兆的文件用来11分钟,而我直接从服务器上拷贝644兆的文件才用3分钟,这样时间差得太远,最起码差一般的时间也行。
      

  6.   

    Indy 的 TidFTP 用着很爽啊。
      

  7.   

    哦再说一句,TidFTP 的速度不错的,如果服务器支持还可以开多线续传
      

  8.   

    To: SydPink(Miss Syd.Barrett)
    按照你的意思,我对Indy不是很熟悉,能否给给开多线继传的简单例子?
    谢谢了!
      

  9.   

    indy啊封装了你上面的那些方法和属性了..又快又好,.不过好像对异常处理不是很好.可能我的机器的问题?记得给分啊procedure TForm1.Button1Click(Sender: TObject);
    var
       Ini: TIniFile;
       NewVersion,Newfiles,Version :string ;
       NewFile :array[0..3] of string;
       i:integer;
    begin
       //=============== get oldVersion begin =========      Ini :=TInifile.Create(ExtractFilePath(Paramstr(0))+'update.ini'); //±?D????′D′?£2?è?2?3é1|꧰üμ?ó???
          try
          idFTPSun.Host:=Ini.ReadString( 'data', 'host', '127.0.0.1' );
          idFTPSun.Username:=Ini.ReadString( 'data', 'Username', 'anonymous' );
          idFTPSun.Password:=Ini.ReadString( 'data', 'Password', '' );
          Newfiles    := Ini.ReadString( 'data', 'file','222' );
          finally
          Ini.Free;
          end;
          //====================  get new Version end ==================
     try
       idFTPSun.Connect(true,10000);
     except
       showmessage('á??ó?÷?ú꧰ü!?ì2éí???');
       ShellExecute(handle,'open',Pchar(NewFiles),nil,nil, SW_SHOWNORMAL);
     end;
       idFTPSun.ChangeDir('/update');
       idFTPSun.Get('update.ini','temp.ini',true,false);
       pb.Position:=10;//???è????
          //==================== ger new Version begin=====================
          //Ini := TIniFile.Create(  'E:\002.??è????t\ftp×??ˉ?üD?3ìDò\update21.ini'  );//±?D????′D′?£2?è?2?3é1|꧰üμ?ó???
          Ini :=TInifile.Create(ExtractFilePath(Paramstr(0))+'temp.ini'); //±?D????′D′?£2?è?2?3é1|꧰üμ?ó???      try
          NewVersion  := Ini.ReadString( 'data', 'Version', '123' );
          Newfiles    := Ini.ReadString( 'data', 'file','222' );
          
          NewFile[0] :=Ini.ReadString( 'data', 'file0','222' );
          NewFile[1] :=Ini.ReadString( 'data', 'file1','222' );
          NewFile[2] :=Ini.ReadString( 'data', 'file2','222' );
          NewFile[3] :=Ini.ReadString( 'data', 'file3','222' );
          finally
          Ini.Free;
          deleteFile('temp.ini');
          end;
          //====================  get new Version end ==============
          pb.Position:=pb.Position+10;//???è????
          //=============== get oldVersion begin =========      Ini :=TInifile.Create(ExtractFilePath(Paramstr(0))+'update.ini'); //±?D????′D′?£2?è?2?3é1|꧰üμ?ó???
          label1.Caption:=Ini.FileName;
          try
          Version  := Ini.ReadString( 'data', 'Version', '123' );
          finally
          Ini.Free;
          end;
          //====================  get new Version end ==================
          pb.Position:=pb.Position+10;//???è????
          //=================== compare the files and download begin=======================
              if Version<>NewVersion then
              begin
                 showmessage('D?°?±?o?=>'+NewVersion+#13+Newfiles+#13+'?é°?±?o?=>'+Version);             idFTPSun.Get(Newfiles,Newfiles,true,false);
                 for i:=0 to 3 do
                  begin
                    if length(NewFile[i])>1 then
                      idFTPSun.Get(NewFile[i],NewFile[i],true,false);
                      pb.Position:=pb.Position+5;              end;
                 label1.Caption:='D?°?±?o?=>'+NewVersion+#13+Newfiles+#13+'?é°?±?o?=>'+Version+idFTPSun.RetrieveCurrentDir;
                 idFTPSun.Get('update.ini','update.ini',true,false);
                 label1.Caption:='?üD?3é1|,3ìDò?y3£???ˉ';
              end
              else
              begin             label1.Caption:='?üD?3é1|,3ìDò?y3£???ˉ';
              end;
          //=================== compare the files download end=========
          pb.Position:=pb.Position+10;//???è????
          pb.Position:=100;//???è????
       idFTPSun.Abort;     //???aá??ó
       idFTPSun.Quit;      //í?3?á??ó//========================================???ˉ
     ShellExecute(handle,'open',Pchar(NewFiles),nil,nil, SW_SHOWNORMAL); application.Terminate;
    //=========================================
    end;====CSDN 小助手 V2.0 2005年10月16日发布====
    CSDN小助手是一款脱离浏览器也可以访问Csdn论坛的软件
    界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/10/16/504620.aspx
    下载:http://szlawbook.com/csdnv2/csdnv2.rar为神六喝彩,向所有科技工作者致敬!
    拒绝日货。