给你一个例子,                               使用FTP控件下载一个目录
delphi中的nmftp控件中Download函数只能下载一个文件,没有提供一个下载整个目录(包含子目录)的函数。
我编写了个实现目录下载功能的方法,需要用到该功能的用户可参考一下。
file://目录下载
function tftp.ex_download(remote_dir,local_dir:string):boolean;
var
    i,j,count1:integer;
    att,ss:string;
    current_dir:string;
    temp_dir:string;
begin
    try begin
        NMFTP1.ChangeDir(remote_dir);
        current_dir:=remote_dir;
        temp_dir:=copy(current_dir,2,length(current_dir));
        if not DirectoryExists(local_dir) then CreateDir(local_dir);
        if not directoryexists(local_dir+temp_dir) then createdir(local_dir+temp_dir);
        nmftp1.ParseList:=true;
        NMftp1.list;
        count1:=nmftp1.FTPDirectoryList.name.Count;
        for i:=0 to count1-1  do begin
            file://必须
            NMFTP1.ChangeDir(current_dir);
            nmftp1.list;
            ss:=nmftp1.FTPDirectoryList.name.Strings[i];
            att:=nmftp1.FTPDirectoryList.Attribute.Strings[i];
            if (copy(pchar(att),1,1)<>'d')and(copy(pchar(att),1,1)<>'D') then begin
                if not DirectoryExists(local_dir) then CreateDir(local_dir);
                NMFTP1.Download(current_dir+ss,local_dir+temp_dir+ss);
            end
            else begin
                if not directoryexists(local_dir+temp_dir+ss) then createdir(local_dir+temp_dir+ss);
                file://递归调用
                ex_download(remote_dir+ss+'\',local_dir);
            end;
        end;
           result:=true;
    end
    except
    On E:Exception do begin
        result:=false;
    end;
    end;
end;

解决方案 »

  1.   

    这是一些NMFTP控件的简单方法。你参考一下!procedure TForm1.Button2Click(Sender: TObject);
    begin
      NMFTP1.List;
    end;
    procedure TForm1.Button3Click(Sender: TObject);
    var
      TheDir: String;
    begin
      if InputQuery('Change Directory', 'Which directory?', TheDir) then
        NMFTP1.ChangeDir(TheDir);
    end;
    procedure TForm1.Button4Click(Sender: TObject);
    var
      TheDir: String;
    begin
      if InputQuery('Create Directory', 'Directory name?', TheDir) then
        NMFTP1.MakeDirectory(TheDir);
    end;
    procedure TForm1.Button5Click(Sender: TObject);
    var
      TheDir: String;
    begin
      if InputQuery('Remove Directory', 'Directory name?', TheDir) then    NMFTP1.RemoveDir(TheDir);
    end;
    procedure TForm1.Button6Click(Sender: TObject);
    var
      TheFile: String;
    begin
      if InputQuery('Delete File', 'File name?', TheFile) then
        NMFTP1.Delete(TheFile);
    end;
    procedure TForm1.Button7Click(Sender: TObject);
    var
      OldFile,
      NewFile: String;
    begin
      if InputQuery('Rename file', 'File to rename?', OldFile) then
        if InputQuery('Rename file', 'New file name?', NewFile) then
          NMFTP1.Rename(OldFile, NewFile);
    end;
    procedure TForm1.Button8Click(Sender: TObject);
    begin
      ShowMessage('After reinitilizing, you must click the authenticate button');
      NMFTP1.Reinitialize;
    end;
    procedure TForm1.Button9Click(Sender: TObject);
    var  AnID,
      APass: String;
    begin
      if InputQuery('Authentication needed', 'Enter User ID', AnID) then
        if InputQuery('Authentication needed', 'Enter Password', APass) then
          begin
            NMFTP1.DoCommand('USER '+AnID);
            NMFTP1.DoCommand('PASS '+APass);
          end;
    end;
    procedure TForm1.Button10Click(Sender: TObject);
    begin
      ShowMessage(NMFTP1.CurrentDir);
    end;
    procedure TForm1.NMFTP1AuthenticationFailed(var Handled: Boolean);
    var
      ThePass,
      TheID: String;
    begin
      if MessageDlg('Authentication Failed. Retry?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
        begin
          ThePass := NMFTP1.Password;
          TheID := NMFTP1.UserID;
          InputQuery('Reauthenticate', 'Enter User ID', TheID);
          InputQuery('Reauthenticate', 'Enter Password', ThePass);
          NMFTP1.Password := ThePass;
          NMFTP1.UserID := TheID;      Handled := TRUE;
        end;
    end;
    procedure TForm1.NMFTP1AuthenticationNeeded(var Handled: Boolean);
    var
      APass,
      AnID: String;
    begin
      if NMFTP1.Password = '' then
        begin
          if InputQuery('Password needed', 'Enter password: ', APass) then
            begin
              NMFTP1.Password := APass;
              Handled := TRUE;
            end
          else
            Handled := FALSE;
        end;  if NMFTP1.UserID = '' then
        begin
          if InputQuery('User ID needed', 'Enter User ID: ', AnID) then
            begin
              NMFTP1.UserID := AnID;
              Handled := TRUE;
            end
          else
            Handled := FALSE;
        end;
    end;