请问如何将远程服务器上的文件传输到本地机上.(程序可以运行在远程服务器上).
谢谢

解决方案 »

  1.   

    一定要用FTP实现吗?FTP如何调用呢?使用ShellExecute吗?可是好象参数不能调用呀.没有直接指定host和psd的参数吧.该如何做呢?
    有没有其他方法实现呢?
      

  2.   

    自己在写程序过程中用到了TNMFtp,于是就自己写了两个过程,实现下载和上传:
    procedure ex_download(remote_dir,remote_file:string);
    var
    localfname:string;
    begin
     datamodule2.NMFTP1.Connect;
     try  datamodule2.NMFTP1.ChangeDir(remote_dir);
       begin
        if nod='ネマヨ、ニスフィ' then
          localfname:=remote_file
        else
          localfname:=mycaption;
          datamodule2.NMFTP1.Download(remote_file,FRootPath+remote_file);
       end
        except
        On E:Exception do begin
           showmessage('下在失败,请检查文件是否存在,或网络是否已断开');
        end;
       end;
     datamodule2.NMFTP1.Disconnect;
    end;procedure ex_upload(remote_dir:string;atable:tcustomadodataset;fieldname:string);
    var
    remotefname,localfname:string;
    label lab;
    begin
     begin
     datamodule2.NMFTP1.Connect;
     try if not DirectoryExists('ftp://'+trim(sysshezhi.edtAddress.text)+'/'+remote_dir) then
        datamodule2.nmftp1.MakeDirectory(remote_dir);
        except
        On E:Exception do begin
        end;end;
        datamodule2.NMFTP1.ChangeDir(remote_dir);
    lab: if datamodule2.OpenDialog1.Execute then
           begin
            temp_dir:='ftp://'+trim(sysshezhi.edtAddress.Text)+'/'+remote_dir;
            localfname:=datamodule2.OpenDialog1.FileName;
            remotefname:=extractfilename(localfname);
            remotefnam:=remotefname;
            if remotefname='' then
             begin
              showmessage('没选中文件!请重新选择');
              goto lab;
             end
               else
                begin
                 if findfile(atable,remotefnam,fieldname) then
                   begin
                    if MessageDlg('文件已存在,覆盖吗?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
                      begin
                       bool:=true;
                       ins:=false;
                       datamodule2.NMFTP1.upload(localfname,remotefname);
                      end
                       else
                        begin
                         bool:=false;
                         messagebox(0,'上传取消','提示!',0);
                       end;
                    end;
                 if not findfile(atable,remotefnam,fieldname) then
                   begin
                    bool:=true;ins:=true;
                    datamodule2.NMFTP1.upload(localfname,remotefname);
                   end;
                end;
            end;
     end;
    因为程序时作项目的时候写的,所以里面又TABLE:)
    机制是:本地显示数据库里的内容,数据库里的内容是记录了上传的信息。
      

  3.   

    利用TNMFTP删除服务器的文件
    procedure del_file(remote_dir,filename:string);
    begin
      datamodule2.NMFTP1.Connect;
      datamodule2.NMFTP1.ChangeDir(remote_dir);datamodule2.NMFTP1.Delete(filename);
       if fileexists(filename) then
        begin
         if  deletefile(pchar(filename)) then
           showmessage('文件已删除')
          else showmessage('无法删除文件,请检查网络或查看权限分配');end else
        showmessage('要删除的文件不存在,操作无法完成');
       datamodule2.NMFTP1.disconnect;
    end;
      

  4.   

    那样需要FTP服务器,其实不用这么复杂,用NMSTRMSEND和NMSTRMSERV就可以完成
      

  5.   

    用FTP最好,Delphi7默认已经不支持NM系列控件了,转为Indy控件包,建议用Indy的FTP控件
      

  6.   

    如果单个文件不是很大(小于5M),可以把文件作为OleVariant参数来传递。
    这样子可以不用FTP控件。
      

  7.   

    Indy的FTP控件好了,delphi下面的那个Demo改改就行了,很简单的