各位大侠:
    在delphi中如何读取ftp上的文件?
    例如:ftp服务器:ftp://192.9.200.100上有个文件sam.exe,ftp登陆用户:01,密码:01;如何在form1上单击button1,读取(运行)sam.exe.文件。
    谢谢。
    最好说的详细点。

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, OleServer, Outlook8, ExtCtrls, ComCtrls, Psock, NMFtp;type
      TForm1 = class(TForm)
        Label1: TLabel;
        Edit1: TEdit;
        Label2: TLabel;
        Edit2: TEdit;
        btnConnect: TButton;
        btnDisconnect: TButton;
        btnDir: TButton;
        ListBox1: TListBox;
        btnUpload: TButton;
        OpenDialog1: TOpenDialog;
        SaveDialog1: TSaveDialog;
        btnDownload: TButton;
        Edit3: TEdit;
        Label3: TLabel;
        Label4: TLabel;
        Edit4: TEdit;
        StatusBar1: TStatusBar;
        Bevel1: TBevel;
        NMFTP1: TNMFTP;
        Edit5: TEdit;
        btnCD: TButton;
        Label5: TLabel;
        Edit6: TEdit;
        Edit7: TEdit;
        btnRename: TButton;
        Label6: TLabel;
        Edit8: TEdit;
        btnDelete: TButton;
        procedure FormCreate(Sender: TObject);
        procedure btnConnectClick(Sender: TObject);
        procedure btnDisconnectClick(Sender: TObject);
        procedure NMFTP1Connect(Sender: TObject);
        procedure NMFTP1Disconnect(Sender: TObject);
        procedure NMFTP1Success(Trans_Type: TCmdType);
        procedure NMFTP1Failure(var Handled: Boolean; Trans_Type: TCmdType);
        procedure btnDirClick(Sender: TObject);
        procedure NMFTP1ListItem(Listing: String);
        procedure btnCDClick(Sender: TObject);
        procedure btnUploadClick(Sender: TObject);
        procedure NMFTP1PacketSent(Sender: TObject);
        procedure btnDownloadClick(Sender: TObject);
        procedure NMFTP1PacketRecvd(Sender: TObject);
        procedure btnRenameClick(Sender: TObject);
        procedure btnDeleteClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
    begin
        //init
        Edit1.Text:='10.13.101.113';
        Edit2.Text:='21';
        //ftp time out value
        NMFTP1.TimeOut:=2000;
        //edit property
        Edit3.Text:='';
        Edit4.Text:='';
        Edit5.Text:='';
        Edit6.Text:='';
        Edit7.Text:='';
        Edit8.Text:='';
    end;procedure TForm1.btnConnectClick(Sender: TObject);
    begin
      // server info
      NMFTP1.Host := Edit1.Text;
      NMFTP1.Port := StrToInt(Edit2.Text);
      NMFTP1.UserID := 'shihongchun';
      NMFTP1.Password := 'lixiaodan';
      NMFTP1.Connect;
    end;procedure TForm1.btnDisconnectClick(Sender: TObject);
    begin
        NMFTP1.Disconnect;
    end;procedure TForm1.NMFTP1Connect(Sender: TObject);
    begin
        StatusBar1.SimpleText := 'Connected';
    end;procedure TForm1.NMFTP1Disconnect(Sender: TObject);
    begin
        StatusBar1.SimpleText := 'Disconnected';
    end;procedure TForm1.NMFTP1Success(Trans_Type: TCmdType);
    begin
      Case Trans_Type of
        cmdChangeDir: StatusBar1.SimpleText := 'ChangeDir success';
        cmdMakeDir: StatusBar1.SimpleText := 'MakeDir success';
        cmdDelete: StatusBar1.SimpleText := 'Delete success';
        cmdRemoveDir: StatusBar1.SimpleText := 'RemoveDir success';
        cmdList: StatusBar1.SimpleText := 'List success';
        cmdRename: StatusBar1.SimpleText := 'Rename success';
        cmdUpRestore: StatusBar1.SimpleText := 'UploadRestore success';
        cmdDownRestore: StatusBar1.SimpleText := 'DownloadRestore success';
        cmdDownload: StatusBar1.SimpleText := 'Download success';
        cmdUpload: StatusBar1.SimpleText := 'Upload success';
        cmdAppend: StatusBar1.SimpleText := 'UploadAppend success';
        cmdReInit: StatusBar1.SimpleText := 'ReInit success';
        cmdAllocate: StatusBar1.SimpleText := 'Allocate success';
        cmdNList: StatusBar1.SimpleText := 'NList success';
        cmdDoCommand: StatusBar1.SimpleText := 'DoCommand success';
      end;
    end;procedure TForm1.NMFTP1Failure(var Handled: Boolean; Trans_Type: TCmdType);
    begin
      Case Trans_Type of
        cmdChangeDir: StatusBar1.SimpleText := 'ChangeDir failure';
        cmdMakeDir: StatusBar1.SimpleText := 'MakeDir failure';
        cmdDelete: StatusBar1.SimpleText := 'Delete failure';
        cmdRemoveDir: StatusBar1.SimpleText := 'RemoveDir failure';
        cmdList: StatusBar1.SimpleText := 'List failure';
        cmdRename: StatusBar1.SimpleText := 'Rename failure';
        cmdUpRestore: StatusBar1.SimpleText := 'UploadRestore failure';
        cmdDownRestore: StatusBar1.SimpleText := 'DownloadRestore failure';
        cmdDownload: StatusBar1.SimpleText := 'Download failure';
        cmdUpload: StatusBar1.SimpleText := 'Upload failure';
        cmdAppend: StatusBar1.SimpleText := 'UploadAppend failure';
        cmdReInit: StatusBar1.SimpleText := 'ReInit failure';
        cmdAllocate: StatusBar1.SimpleText := 'Allocate failure';
        cmdNList: StatusBar1.SimpleText := 'NList failure';
        cmdDoCommand: StatusBar1.SimpleText := 'DoCommand failure';
      end;end;procedure TForm1.btnDirClick(Sender: TObject);
    begin
        //clear old info
        ListBox1.Items.Clear;
        //Dir
        try
            NMFTP1.List;
        except
            //error trap
        end;end;procedure TForm1.NMFTP1ListItem(Listing: String);
    begin
        //add dir
        ListBox1.Items.Add(Listing);
    end;procedure TForm1.btnCDClick(Sender: TObject);
    begin
        //change dir
        Try
            NMFTP1.ChangeDir(Edit5.Text);
        Except
        end;
    end;procedure TForm1.btnUploadClick(Sender: TObject);
    var
        localfname:string;
        remotefname:string;
    begin
        //UPLOAD
        if OpenDialog1.Execute then
            begin
                localfname:=OpenDialog1.FileName;
                remotefname:=Edit3.Text;
                if remotefname='' then
                    remotefname:=extractfilename(localfname);
                try
                    NMFTP1.Upload(localfname, remotefname);
                except
                end;
            end;
    end;procedure TForm1.NMFTP1PacketSent(Sender: TObject);
    begin
        //show percent
        StatusBar1.SimpleText :=
            inttostr(round((NMFTP1.BytesSent/NMFTP1.BytesTotal)*100))+'%';
    end;procedure TForm1.btnDownloadClick(Sender: TObject);
    var
        localfname:string;
        remotefname:string;
    begin
        if SaveDialog1.Execute then
            begin
                localfname:=SaveDialog1.FileName;
                remotefname:=Edit4.Text;
                if remotefname='' then
                    exit;
                try
                    NMFTP1.Download(remotefname, localfname);
                except
                end;
            end;
    end;procedure TForm1.NMFTP1PacketRecvd(Sender: TObject);
    begin
        StatusBar1.SimpleText :=
            inttostr((Round((NMFTP1.BytesRecvd/NMFTP1.BytesTotal)*100)))+'%';
    end;procedure TForm1.btnRenameClick(Sender: TObject);
    var
        sourfname:string;
        dentfname:string;
    begin
        sourfname:=Edit6.Text;
        if sourfname='' then
            exit;
        dentfname:=Edit7.Text;
        if dentfname='' then
            exit;
        try
            NMFTP1.Rename(sourfname, dentfname);
        except
        end;
    end;procedure TForm1.btnDeleteClick(Sender: TObject);
    var
        remotefname:string;
    begin
        //delete
        remotefname:=Edit8.Text;
        if remotefname='' then
            exit;
        try
            NMFTP1.Delete(remotefname);
        except
        end;
    end;end.