Indy ftp(服务端)控件如何指定用户的目录?最好有例子!

解决方案 »

  1.   

    userAccount := IdFTPServer1.UserAccounts.Accounts.Add;
      userAccount.UserName := 'nick';
      userAccount.Password := '123';
      userAccount.Attributes.Add('d:\common\');
      

  2.   

    我前段时间没事做,自己写的一个FTP客户端的主窗口代码,还没有完成,没有多线程和断点续传,谁给补充一下!!
    //Sunheart
    unit FtpMain;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, ImgList, Menus, ComCtrls, ToolWin, StdCtrls, Buttons,
      ActnList, FileCtrl, IdBaseComponent, IdComponent, IdTCPConnection,
      IdTCPClient, IdFTP, IdFTPList, StrUtils, INIFiles, FtpTop, ManSite;type
      TMainForm = class(TForm)
        MainMenu1: TMainMenu;
        CoolBar1: TCoolBar;
        ToolBar1: TToolBar;
        N1: TMenuItem;
        Images: TImageList;
        Panel1: TPanel;
        GroupBox1: TGroupBox;
        GroupBox2: TGroupBox;
        MeMsg: TMemo;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        BitDiscon: TBitBtn;
        BitConnect: TBitBtn;
        CIsAnon: TCheckBox;
        EPort: TEdit;
        EUserName: TEdit;
        EPassword: TEdit;
        CHostName: TComboBox;
        ActionLs: TActionList;
        Connects: TAction;
        Disconn: TAction;
        DownLoad: TAction;
        UpLoad: TAction;
        LocalDirUp: TAction;
        RemoteDirUp: TAction;
        LocalChangeDir: TAction;
        RemoteChangeDir: TAction;
        LocalDel: TAction;
        RemoteDel: TAction;
        LocalNewDir: TAction;
        RemoteNewDir: TAction;
        LocalRename: TAction;
        RemoteRename: TAction;
        LocalRefresh: TAction;
        RemoteRefresh: TAction;
        StatusBar1: TStatusBar;
        GroupBox3: TGroupBox;
        QueueList: TListView;
        GroupBox4: TGroupBox;
        Panel2: TPanel;
        Splitter1: TSplitter;
        Splitter2: TSplitter;
        GroupBox5: TGroupBox;
        Panel6: TPanel;
        Panel8: TPanel;
        Panel3: TPanel;
        DriveCB: TDriveComboBox;
        LocalFileList: TListView;
        Panel5: TPanel;
        Panel7: TPanel;
        ComboHistory: TComboBox;
        RemoteFileList: TListView;
        SpLocalDirUp: TSpeedButton;
        SpRemoteDirUp: TSpeedButton;
        SpUpload: TSpeedButton;
        SpLocalDel: TSpeedButton;
        SpLocalRename: TSpeedButton;
        SpLocalMakeDir: TSpeedButton;
        SpLocalRefresh: TSpeedButton;
        SpDownload: TSpeedButton;
        SpRemoteDel: TSpeedButton;
        SpRemoteRename: TSpeedButton;
        SpRemoteMakeDir: TSpeedButton;
        SpRemoteRefresh: TSpeedButton;
        TheExit: TAction;
        SpExit: TSpeedButton;
        LocalInf: TLabel;
        RemoteInf: TLabel;
        PopLocal: TPopupMenu;
        PopRemote: TPopupMenu;
        PopQueue: TPopupMenu;
        L1: TMenuItem;
        N2: TMenuItem;
        L2: TMenuItem;
        N3: TMenuItem;
        D1: TMenuItem;
        N4: TMenuItem;
        F1: TMenuItem;
        N5: TMenuItem;
        R1: TMenuItem;
        U1: TMenuItem;
        N6: TMenuItem;
        L3: TMenuItem;
        N7: TMenuItem;
        D2: TMenuItem;
        N8: TMenuItem;
        F2: TMenuItem;
        N9: TMenuItem;
        R2: TMenuItem;
        SpConn: TSpeedButton;
        SpDisc: TSpeedButton;
        SpSites: TSpeedButton;
        SpHelp: TSpeedButton;
        SpAbout: TSpeedButton;
        N10: TMenuItem;
        N16: TMenuItem;
        N17: TMenuItem;
        N19: TMenuItem;
        N20: TMenuItem;
        N21: TMenuItem;
        N24: TMenuItem;
        SFtp: TIdFTP;
        N25: TMenuItem;
        A1: TMenuItem;
        ImageLs: TImageList;
        TheHelp: TAction;
        TheAbout: TAction;
        ControlBar1: TControlBar;
        ControlBar2: TControlBar;
        Imgs: TImageList;
        M1: TMenuItem;
        ControlBar3: TControlBar;
        N11: TMenuItem;
        S1: TMenuItem;
        SpSet: TSpeedButton;
        procedure TheExitExecute(Sender: TObject);
        procedure LocalDirUpExecute(Sender: TObject);
        procedure RemoteDirUpExecute(Sender: TObject);
        procedure ConnectsExecute(Sender: TObject);
        procedure RemoteChangeDirExecute(Sender: TObject);
        procedure LocalFileListDblClick(Sender: TObject);
        procedure DownLoadExecute(Sender: TObject);
        procedure UpLoadExecute(Sender: TObject);
        procedure LocalChangeDirExecute(Sender: TObject);
        procedure LocalNewDirExecute(Sender: TObject);
        procedure RemoteDelExecute(Sender: TObject);
        procedure RemoteNewDirExecute(Sender: TObject);
        procedure DriveCBChange(Sender: TObject);
        procedure RemoteFileListDblClick(Sender: TObject);
        procedure RemoteRenameExecute(Sender: TObject);
        procedure DisconnExecute(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure LocalRenameExecute(Sender: TObject);
        procedure LocalDelExecute(Sender: TObject);
        procedure RemoteRefreshExecute(Sender: TObject);
        procedure LocalRefreshExecute(Sender: TObject);
        procedure CIsAnonClick(Sender: TObject);
        procedure L1DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect;
          Selected: Boolean);
        procedure FormCreate(Sender: TObject);
        procedure ComboHistoryChange(Sender: TObject);
        procedure TheAboutExecute(Sender: TObject);
        procedure M1Click(Sender: TObject);
        procedure SpAboutClick(Sender: TObject);
        procedure SpSitesClick(Sender: TObject);
        procedure CHostNameChange(Sender: TObject);
        procedure CHostNameClick(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure SpSetClick(Sender: TObject);
        procedure S1Click(Sender: TObject);
        procedure SpHelpClick(Sender: TObject);
      private
        { Private declarations }
        IsTransParent:Boolean;
        LocalPath:String;
      public
        { Public declarations }
      end;var
      MainForm: TMainForm;
      PresentSite:String;implementationuses FtpSet, FtpHelp;{$R *.dfm}function TheSize(sizes:Int64):String;
    var
      tmp:Real;
      TheUnit:String;
    begin
      if sizes<1024 then
      begin
        tmp:=sizes;
        TheUnit:=' B';
      end
      else
      if sizes<1024*1024 then
      begin
        tmp:=sizes/1024;
        TheUnit:=' KB';
      end
      else
      if sizes<1024*1024*1024 then
      begin
        tmp:=sizes/(1024*1024);
        TheUnit:=' MB';
      end
      else
      begin
        tmp:=sizes/(1024*1024*1024);
        TheUnit:=' GB';
      end;
      Result:=Format('%.2f',[tmp])+TheUnit;
    end;function GetAFileExt(FileName:String):String;
    var
      TheExt:String;
    begin
      Result:='';
      TheExt:=UpperCase(Trim(ExtractFileExt(FileName)));
      Result:=(RightStr(TheExt,Length(TheExt)-1)+' 文件');
    end;function PrintTheError(TheError:String):Integer;
    begin
      MainForm.MeMsg.Lines.Add('出错信息('+DateTimeToStr(Now)+'):');
      MainForm.MeMsg.Lines.Add('    '+TheError);
      Result:=1;
    end;procedure DrawItem(Item:TMenuItem; ACanvas: TCanvas; ARect: TRect; Selected: Boolean);
    var
      i,xb:integer;
    begin
      ACanvas.Font := Screen.IconFont;
      ACanvas.Brush.Color := clBtnFace;
      ACanvas.FillRect(ARect);
      ACanvas.TextOut(ARect.Left+20,ARect.Top+4,Item.Caption);
      if Selected then
      begin
        xb:=0;
        for i:=0 to ARect.Right do
        begin
           ACanvas.Brush.Color :=clTeal+i*$100;
           ACanvas.FillRect(Rect(xb,ARect.Top,xb+1,ARect.Bottom));
           inc(xb);
        end;
        ACanvas.Font.Color:=clWhite;
        SetBkMode(ACanvas.Handle,TRANSPARENT);
        ACanvas.TextOut(ARect.Left+20,ARect.Top+4,Item.Caption);
      end;
      MainForm.Images.Draw(ACanvas,ARect.Left+1,ARect.Top+1,Item.ImageIndex,true);
    end;
      

  3.   

    procedure TMainForm.TheExitExecute(Sender: TObject);
    begin
      if SFtp.Connected then
        if MessageDlg('是否中止当前的连接和下载过程?',mtCustom,[mbYes,mbNo],0)=mrYes then
        begin
          try
            if IsTransParent then
              SFtp.Abort;
            SFtp.Quit;
          except
            On E:Exception do
            begin
              PrintTheError('中止当前下载过程时出错,'+E.Message);
              Exit;
            end;
          end;
        end
        else
          Exit;
      Halt;
    end;procedure TMainForm.LocalDirUpExecute(Sender: TObject);
    begin
      if length(LocalPath)=3 then Exit;
      LocalPath:=LocalPath+'.txt';
      LocalPath:=ExtractFileDir(LocalPath);
      LocalChangeDirExecute(Sender);
    end;procedure TMainForm.RemoteDirUpExecute(Sender: TObject);
    begin
      if SFtp.Connected then
      begin
        if (ComboHistory.Text='/') or (ComboHistory.Text='') then Exit;      
        try
          SFtp.ChangeDirUp;
          ComboHistory.ItemIndex:=ComboHistory.Items.IndexOf(SFtp.RetrieveCurrentDir);
          RemoteChangeDirExecute(Sender);
        except
          On E:Exception do
          begin
            PrintTheError('返回上层目录出错,'+E.Message);
            Exit;
          end;
        end;
      end; 
    end;procedure TMainForm.ConnectsExecute(Sender: TObject);
    var
      i:integer;
    begin
      if SFtp.Connected then
        DisConnExecute(Sender);
      if SFtp.Connected then Exit;      
      MeMsg.Lines.Add('正在连接FTP站点:'+CHostName.Text+'...');
      try
        if Trim(CHostName.Text)='' then
        begin
          PrintTheError('FTP主机地址为空!');
          Exit;
        end;
        if not TryStrToInt(Trim(EPort.Text),i) then
        begin
          PrintTheError('您输入的端口号非法!');
          Exit;
        end;
        if EPort.Text='' then
          EPort.Text:='21';
        if EUserName.Text='' then
          EUserName.Text:='Anonymous';
        if EPassword.Text='' then
          EPassword.Text:='[email protected]';
        SFtp.Username:=EUserName.Text;
        SFtp.Password:=EPassword.Text;
        SFtp.Host:=CHostName.Text;
        SFtp.Port:=StrToInt(EPort.Text);    SFtp.Connect;
        MeMsg.Lines.AddStrings(SFtp.LoginMsg.Text);
        ComboHistory.Clear;
        ComboHistory.Items.Add('/');
        ComboHistory.ItemIndex:=0;
        RemoteChangeDirExecute(Sender);
      except
        On E:Exception do
        begin
          PrintTheError('连接出错,'+E.Message);
          Exit;
        end;
      end;
    end;procedure TMainForm.RemoteChangeDirExecute(Sender: TObject);
    var
      LS:TStringList;
      FileCount:Integer;
      newItem:TListItem;
      FolderCount:Integer;
      TheName:String;
      FileNum,FolderNum,AllSize:Integer;
    begin
      FileNum:=0;
      FolderNum:=0;
      AllSize:=0;
      FolderCount:=1;
      if not SFtp.Connected then Exit;
      try
        LS:=TStringList.Create;
        SFtp.ChangeDir(ComboHistory.Text);
        RemoteFileList.Items.Clear;
        newItem:=RemoteFileList.Items.Add;
        newItem.ImageIndex:=2;
        newItem.Caption:='上层目录';
        SFtp.List(LS);
        for FileCount:=0 to LS.Count-1 do    // Iterate
        begin
          TheName:=SFtp.DirectoryListing.Items[FileCount].FileName;
          if (TheName<>'.') and (TheName<>'..') then
          begin
            if SFtp.DirectoryListing.Items[FileCount].ItemType=ditDirectory then
            begin
              FolderNum:=FolderNum+1;
              newItem:=RemoteFileList.Items.Insert(FolderCount);
              newItem.ImageIndex:=0;
              newItem.SubItems.Add('');
              newItem.SubItems.Add('文件夹');
            end
            else
            begin
              FileNum:=FileNum+1;
              newItem:=RemoteFileList.Items.Add;
              newItem.ImageIndex:=1;
              newItem.SubItems.Add(TheSize(SFtp.DirectoryListing.Items[FileCount].Size));
              newItem.SubItems.Add(GetAFileExt(SFtp.DirectoryListing.Items[FileCount].FileName));
              AllSize:=AllSize+SFtp.DirectoryListing.Items[FileCount].Size;
            end;
            newItem.Caption:=SFtp.DirectoryListing.Items[FileCount].FileName;
            newItem.SubItems.Add(DateTimeToStr(SFtp.DirectoryListing.Items[FileCount].ModifiedDate));
            newItem.SubItems.Add(SFtp.DirectoryListing.Items[FileCount].OwnerPermissions);
          end;
        end;    // for
        RemoteInf.Caption:=IntToStr(FolderNum)+'个文件夹,'+IntToStr(FileNum)+'个文件,共'+TheSize(AllSize)+#10+'FTP站点说明:'+PresentSite;
      except
        on E: Exception Do
        begin
          ComboHistory.Items.Delete(ComboHistory.ItemIndex);
          ComboHistory.ItemIndex:=ComboHistory.Items.IndexOf(GetCurrentDir);
          PrintTheError('打开文件列表出错,'+E.Message);
          Ls.Free;
          Exit;
        end;
      end;
      Ls.Free;
    end;procedure TMainForm.LocalFileListDblClick(Sender: TObject);
    var
      FileName:String;
    begin
      if LocalFileList.Selected=nil then Exit;
      if LocalFileList.Selected.Index=0 then
      begin
        LocalDirUpExecute(Sender);
        Exit;
      end;
      FileName:=LocalFileList.Selected.Caption;
      if LocalFileList.Selected.SubItems[1]='文件夹' then
      begin
        if Length(LocalPath)=3 then
          LocalPath:=LocalPath+FileName
        else
          LocalPath:=LocalPath+'\'+FileName;
        LocalChangeDirExecute(Sender);
      end
      else
      begin
        if not SFtp.Connected then Exit;
        if MessageDlg('是否上传该文件?',mtCustom,[mbYes,mbNo],0)=mrYes then
          try
            UpLoadExecute(Sender);
          except
            On E:Exception do
              PrintTheError('上传文件"'+fileName+'"出错,'+E.Message);
          end;
      end;
    end;procedure TMainForm.DownLoadExecute(Sender: TObject);
    var
      FileName:String;
      Item:TListItem;
      QueueItem:TListItem;
    begin
      if not SFtp.Connected then Exit;
      if RemoteFileList.Selected=nil then Exit;
      if RemoteFileList.Selected.SubItems[1]='文件夹' then Exit;    
      Item:=RemoteFileList.Selected;
      QueueList.Clear;  while Item<>nil do
      begin
        QueueItem:=QueueList.Items.Add;
        QueueItem.ImageIndex:=1;
        QueueItem.Caption:='';
        QueueItem.SubItems.Add(Item.Caption);
        QueueItem.SubItems.Add(Item.SubItems[0]);
        QueueItem.SubItems.Add(Item.SubItems[1]);
        QueueItem.SubItems.Add(LocalPath);
        QueueItem.SubItems.Add('');
        QueueItem.SubItems.Add('');
        QueueItem.SubItems.Add('<-');
        QueueItem.SubItems.Add(ComboHistory.Text);
        Item:=RemoteFileList.GetNextItem(Item,sdAll,[isSelected]);
      end;    // while
      QueueList.Refresh;  RemoteFileList.Enabled:=False;
      ComboHistory.Enabled:=False;
      RemoteDirUp.Enabled:=False;
      IsTransParent:=True;
      try
        while QueueList.Items.Count>0 do
        begin
          FileName:=QueueList.Items[0].SubItems[0];
          QueueList.Items[0].SubItems[4]:='正在下载';
          QueueList.Refresh;
          try
            if FileExists(FileName) then
            begin
              if MessageDlg('文件已经存在,是否继续?',mtCustom,[mbYes,mbNo],0)=mrYes then
                SFtp.Get(FileName,LocalPath+'\'+FileName,False,True)
              else
                SFtp.Get(FileName,LocalPath+'\'+FileName,True);
            end
            else
              SFtp.Get(FileName,LocalPath+'\'+FileName,False);
          except
            On E:Exception do
              PrintTheError('下载文件"'+FileName+'"出错,'+E.Message);
          end;
          QueueList.Items[0].Delete;
          QueueList.Refresh;
          LocalChangeDirExecute(Sender);
        end;
        RemoteFileList.Enabled:=True;
        ComboHistory.Enabled:=True;
        RemoteDirUp.Enabled:=True;
        IsTransParent:=False;
      except
        On E:Exception do
        begin
          QueueList.Items[0].SubItems[4]:='错误';
          PrintTheError('下载文件"'+FileName+'"出错,'+E.Message);
          RemoteFileList.Enabled:=True;
          ComboHistory.Enabled:=True;
          RemoteDirUp.Enabled:=True;
          IsTransParent:=False;
        end;
      end;
    end;
      

  4.   

    procedure TMainForm.UpLoadExecute(Sender: TObject);
    var
      FileName:String;
      Item:TListItem;
      QueueItem:TListItem;
    begin
      if not SFtp.Connected then Exit;
      if LocalFileList.Selected=nil then Exit;
      Item:=LocalFileList.Selected;
      QueueList.Clear;
      while Item<>nil do
      begin
        QueueItem:=QueueList.Items.Add;
        QueueItem.ImageIndex:=1;
        QueueItem.Caption:='';
        QueueItem.SubItems.Add(Item.Caption);
        QueueItem.SubItems.Add(Item.SubItems[0]);
        QueueItem.SubItems.Add(Item.SubItems[1]);
        QueueItem.SubItems.Add(SFtp.Host+ComboHistory.Text);
        QueueItem.SubItems.Add('→');
        QueueItem.SubItems.Add('');
        QueueItem.SubItems.Add('');
        QueueItem.SubItems.Add(LocalPath);
        Item:=LocalFileList.GetNextItem(Item,sdAll,[isSelected]);
      end;
      QueueList.Refresh;  LocalFileList.Enabled:=False;
      DriveCB.Enabled:=False;
      RemoteFileList.Enabled:=False;
      ComboHistory.Enabled:=False;
      RemoteDirUp.Enabled:=False;
      IsTransParent:=True;
      try
        while QueueList.Items.Count>0 do
        begin
          FileName:=QueueList.Items[0].SubItems[0];
          QueueList.Items[0].SubItems[4]:='正在上传';
          QueueList.Refresh;
          SFtp.Put(LocalPath+'\'+FileName,FileName);
          RemoteChangeDirExecute(Sender);
          QueueList.Items[0].Delete;
          QueueList.Refresh;
        end;    // while
        LocalFileList.Enabled:=True;
        DriveCB.Enabled:=True;
        RemoteFileList.Enabled:=True;
        ComboHistory.Enabled:=True;
        RemoteDirUp.Enabled:=True;
        IsTransParent:=False;
      except
        On E:Exception do
        begin
          QueueList.Items[0].ImageIndex:=4;
          QueueList.Items[0].SubItems[4]:='错误';
          PrintTheError('上传'+FileName+'出错,'+E.Message);
          LocalFileList.Enabled:=True;
          DriveCB.Enabled:=True;
          RemoteFileList.Enabled:=True;
          ComboHistory.Enabled:=True;
          RemoteDirUp.Enabled:=True;
          IsTransParent:=False;
        end;
      end;
    end;procedure TMainForm.LocalChangeDirExecute(Sender: TObject);
    var
      sr:TSearchRec;
      Item:TListItem;
      FileCount,FolderCount:Integer;
      AllSize:Integer;
    begin
      FileCount:=0;
      FolderCount:=0;
      AllSize:=0;
      SetCurrentDir(LocalPath);
      LocalFileList.Clear;
      Item:=LocalFileList.Items.Add;
      Item.ImageIndex:=2;
      Item.Caption:='上层目录';
      if FindFirst('*',faDirectory,sr)=0 then
      begin
        repeat
          if ((sr.Attr and faDirectory)=sr.Attr) and (sr.Name<>'.') and (sr.Name<>'..') then
          begin
            FolderCount:=FolderCount+1;
            Item:=LocalFileList.Items.Add;
            Item.ImageIndex:=0;
            Item.Caption:=sr.Name;
            Item.SubItems.Add('');
            Item.SubItems.Add('文件夹');
            Item.SubItems.Add(DateTimeToStr(FileDateToDateTime(sr.Time)));
          end;
        until FindNext(sr)<>0;
        FindClose(sr);
      end;  if FindFirst('*',faArchive,sr)=0 then
      begin
        repeat
          FileCount:=FileCount+1;
          Item:=LocalFileList.Items.Add;
          Item.ImageIndex:=1;
          Item.Caption:=sr.Name;
          Item.SubItems.Add(TheSize(sr.Size));
          Item.SubItems.Add(GetAFileExt(sr.Name));
          Item.SubItems.Add(DateTimeToStr(FileDateToDateTime(sr.Time)));
          AllSize:=AllSize+sr.Size;
        until FindNext(sr)<>0;
        FindClose(sr);
      end;
      LocalInf.Caption:=IntToStr(FolderCount)+'个文件夹,'+IntToStr(FileCount)+'个文件,共'+TheSize(AllSize)+#10+LocalPath+'  (可用磁盘空间:'+TheSize(DiskFree(0))+'/共:'+TheSize(DiskSize(0))+')';
    end;procedure TMainForm.LocalNewDirExecute(Sender: TObject);
    var
      NewFolder:String;
    begin
      NewFolder:=InPutBox('新建文件夹','请输入文件夹名:','');
      if NewFolder<>'' then
        try
          CreateDir(NewFolder);
        except
          On E:Exception do
          begin
            PrintTheError('创建本地文件夹出错,'+E.Message);
            Exit;
          end;
        end;
      LocalChangeDirExecute(Sender);
    end;procedure TMainForm.RemoteDelExecute(Sender: TObject);
    var
      FileName:String;
    begin
      if not SFtp.Connected then Exit;
      if RemoteFileList.Selected=nil then Exit;
      FileName:=RemoteFileList.Selected.Caption;
      if RemoteFileList.Selected.SubItems[0]='文件夹' then
        SFtp.RemoveDir(FileName)
      else
        SFtp.Delete(FileName);
      RemoteChangeDirExecute(Sender);
    end;procedure TMainForm.RemoteNewDirExecute(Sender: TObject);
    var
      NewFolder:String;
    begin
      if not SFtp.Connected then Exit;
      NewFolder:=InputBox('新建文件夹','请输入文件夹名:','');
      if NewFolder<>'' then
        try
          SFtp.MakeDir(NewFolder);
          RemoteChangeDirExecute(Sender);
        except
          On E:Exception do
          begin
            PrintTheError('新建文件夹出错,'+E.Message);
            Exit;
          end;
        end;
    end;procedure TMainForm.DriveCBChange(Sender: TObject);
    begin
      LocalPath:=DriveCb.Drive+':\';
      LocalChangeDirExecute(Sender);
    end;procedure TMainForm.RemoteFileListDblClick(Sender: TObject);var
      FileName:String;
    begin
      if not SFtp.Connected then Exit;
      if RemoteFileList.Selected=nil then Exit;
      if RemoteFileList.Selected.Index=0 then
      begin
        RemoteDirUpExecute(Sender);
        Exit;
      end;
      FileName:=RemoteFileList.Selected.Caption;
      if RemoteFileList.Selected.SubItems[1]='文件夹' then
      begin
        if ComboHistory.ItemIndex=0 then
          FileName:='/'+FileName
        else
        begin
          FileName:=ComboHistory.Items[ComboHistory.ItemIndex]+'/'+FileName;
        end;
        if ComboHistory.Items.IndexOf(FileName)=-1 then
          ComboHistory.Items.Add(FileName);
        ComboHistory.ItemIndex:=ComboHistory.Items.IndexOf(FileName);
        RemoteChangeDirExecute(Sender);
      end
      else
        if MessageDlg('是否下载该文件?',mtCustom,[mbYes,mbNo],0)=mrYes then
          DownLoadExecute(Sender);
    end;
      

  5.   

    感谢心晴,不过你给我的是ftpclient端的代码!
    鸽飞,可不可以说的清楚一些,假如我是在ListDirectoryListing中指定用户的目录。
    up