我最近用nmftp控件做一个文件传输方面的东西,发现当用nmftp1.list的时候经常出现整个应用程序没有反映,CPU的利用率,达100% 不知道是控件本身的bug还是怎么回事,请高手帮忙,还有在用nmftp控件的时候还会出现哪些问题,请大家来讨论。

解决方案 »

  1.   

    我想不会
    我做过ftp客户端,支持upload download
    但是没有出现你说的情况
    把你的代码贴出来看看
      

  2.   

    这是充满BUG的控件,及早回头吧,这个控件曾经让我丢尽了脸面,吐血推荐:使用ICS中的TFtpClient.
      

  3.   

    (广州)精通数据库编程,熟悉INTERNET编程,熟悉SQL-SERVER,至少一年DELPHI编程经验,有独立负责开发项目能力,我公司将为您提供良好的个人发展空间,有意者请先将个人简历及其他相关资料和个人要求等说明EMAIL至以下地址(请不要使用附件) 
    联系人:刘先生 
    TEL:38891464 
    FAX:38891460 
    EMAIL:[email protected]
      

  4.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, OleServer, Outlook8, ExtCtrls, ComCtrls, Psock, NMFtp,shellapi;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;
        Edit5: TEdit;
        btnCD: TButton;
        Label5: TLabel;
        Edit6: TEdit;
        Edit7: TEdit;
        btnRename: TButton;
        Label6: TLabel;
        Edit8: TEdit;
        btnDelete: TButton;
        Button1: TButton;
        Button2: TButton;
        Edit9: TEdit;
        Edit10: TEdit;
        Button3: TButton;
        NMFTP1: TNMFTP;
        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);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
    begin
        //init
        Edit1.Text:='192.100.100.1';
        Edit2.Text:='21';
        //ftp time out value
        NMFTP1.TimeOut:=20000;
        //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 := 'anonymous';
      NMFTP1.Password := '[email protected]';
      NMFTP1.Connect;
      //NMFTP1.Mode(MODE_BYTE);
    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.UploadRestore(localfname, remotefname,11);
                 except
                   nmftp1.Disconnect;
                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;procedure TForm1.Button1Click(Sender: TObject);
    begin
    try
    NMFTP1.MakeDirectory(Edit9.Text);
    except
    end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
    try
    NMFTP1.RemoveDir(Edit10.Text);
    except
    end;
    end;
      

  5.   

    procedure TForm1.NMFTP1ListItem(Listing: String);
    begin
        //这里应该加一句,否则循环操作后,一定是很费系统资源的
           listbox1.clear;
           ListBox1.Items.Add(Listing);
    end;
      

  6.   

    我换成delphi6下面好象又没事了,
      

  7.   

    我刚刚发现,也不知道是不是这样:
    其实Delphi 7里面他貌似不叫nmftp 而是应该用TidFTP