多谢!

解决方案 »

  1.   

    给你一个完整的单元
    unit FTPServerUnit;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Mask, SkinBoxCtrls, SkinCtrls, DynamicSkinForm,
      FileCtrl, 
      OverbyteIcsWndControl, OverbyteIcsFtpSrv, OverbyteIcsFtpSrvC,
      OverbyteIcsWSocket, OverbyteIcsWinsock, bsSkinBoxCtrls, bsSkinCtrls,
      BusinessSkinForm, bsSkinData;type
      TFTPServerForm = class(TForm)
        DSF: TspDynamicSkinForm;
        FtpServer1: TFtpServer;
        bsCompressedStoredSkin1: TbsCompressedStoredSkin;
        bsSkinData1: TbsSkinData;
        bsBusinessSkinForm1: TbsBusinessSkinForm;
        bsSkinLabel1: TbsSkinLabel;
        bsSkinLabel2: TbsSkinLabel;
        bsSkinLabel3: TbsSkinLabel;
        bsSkinLabel4: TbsSkinLabel;
        bsSkinLabel5: TbsSkinLabel;
        StartButton: TbsSkinButton;
        StopButton: TbsSkinButton;
        FilenameEdit1: TbsSkinEdit;
        UserEdit: TbsSkinEdit;
        BEdit: TbsSkinEdit;
        PassEdit: TbsSkinPasswordEdit;
        PortEdit: TbsSkinNumericEdit;
        bsSkinSpeedButton1: TbsSkinSpeedButton;
        bsSkinPanel1: TbsSkinPanel;
        Memo1: TbsSkinMemo2;
        bsSkinScrollBar1: TbsSkinScrollBar;
        CheckBox1: TbsSkinCheckRadioBox;
        procedure FtpServer1Authenticate(Sender: TObject;
          Client: TFtpCtrlSocket; UserName, Password: TFtpString;
          var Authenticated: Boolean);
        procedure StartButtonClick(Sender: TObject);
        procedure FtpServer1ChangeDirectory(Sender: TObject;
          Client: TFtpCtrlSocket; Directory: TFtpString; var Allowed: Boolean);
        procedure FtpServer1Start(Sender: TObject);
        procedure FtpServer1Stop(Sender: TObject);
        procedure StopButtonClick(Sender: TObject);
        procedure FtpServer1ClientConnect(Sender: TObject;
          Client: TFtpCtrlSocket; AError: Word);
        procedure FtpServer1ClientDisconnect(Sender: TObject;
          Client: TFtpCtrlSocket; AError: Word);
        procedure FtpServer1ClientCommand(Sender: TObject;
          Client: TFtpCtrlSocket; var Keyword, Params, Answer: TFtpString);
        procedure bsSkinSpeedButton1Click(Sender: TObject);
        procedure CheckBox1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      FTPServerForm: TFTPServerForm;implementation{$R *.dfm}procedure Logit(sTXT : String);
    begin
    try
    FTPServerForm.Memo1.Lines.Insert(0,DateTimeToStr(Now) + ' - ' + stxt);
    except
    FTPServerForm.Memo1.Lines.Clear;
    FTPServerForm.Memo1.Lines.Insert(0,DateTimeToStr(Now) + ' - ' + stxt);
    end;
    end;procedure TFTPServerForm.FtpServer1Authenticate(Sender: TObject;
      Client: TFtpCtrlSocket; UserName, Password: TFtpString;
      var Authenticated: Boolean);
    begin
      logit(client.username);
      if Checkbox1.Checked then
        begin
          Authenticated := True;
          Client.HomeDir := FilenameEdit1.text;
          Exit;
        end;
       if (UserEdit.Text=UserName) and (PassEdit.Text=Password) then
        begin
            Authenticated := True;
            Client.HomeDir := FilenameEdit1.text;
        end else Authenticated := False;
    end;procedure TFTPServerForm.Checkbox1Click(Sender: TObject);
    begin
      if Checkbox1.Checked then
        begin
          UserEdit.Enabled :=False;
          PassEdit.Enabled :=False;
        end else begin
          UserEdit.Enabled :=True;
          PassEdit.Enabled :=True;
        end;
    end;procedure TFTPServerForm.StartButtonClick(Sender: TObject);
    begin
    if FilenameEdit1.Text<>'' then
    begin
       if DirectoryExists(FilenameEdit1.Text) then
         begin
           try
             FtpServer1.Stop;
             FtpServer1.Port := PortEdit.Text;
             FtpServer1.Banner :='220 '+BEdit.Text;
             FtpServer1.Start;
           except
              MessageBox(0,Pchar('打开FTP服务出错!端口冲突!'),Pchar('警告'),MB_OK+MB_ICONINFORMATION);
           end;
         end else begin
           MessageBox(0,Pchar('FTP主目录不存在!请重新选择!'),Pchar('警告'),MB_OK+MB_ICONINFORMATION);
         end;
    end else
    MessageBox(0,Pchar('FTP主目录不存在!请重新选择!'),Pchar('警告'),MB_OK+MB_ICONINFORMATION);
    end;procedure TFTPServerForm.FtpServer1ChangeDirectory(Sender: TObject;
      Client: TFtpCtrlSocket; Directory: TFtpString; var Allowed: Boolean);
    begin
        logit('改变目录 '+Client.Directory);
        if length(Client.Directory) < length(client.HomeDir) then
          begin
            Allowed := FALSE;
            Exit;
          end;
        Allowed := TRUE;
    end;procedure TFTPServerForm.FtpServer1Start(Sender: TObject);
    begin
    StartButton.Enabled :=False;
    StopButton.Enabled :=True;
    Logit('FTP 开始');
    end;procedure TFTPServerForm.FtpServer1Stop(Sender: TObject);
    begin
    StartButton.Enabled :=True;
    StopButton.Enabled :=False;
    Logit('FTP 停止');
    end;procedure TFTPServerForm.StopButtonClick(Sender: TObject);
    begin
    try
      FtpServer1.Stop;
    except
    end;
    end;procedure TFTPServerForm.FtpServer1ClientConnect(Sender: TObject;
      Client: TFtpCtrlSocket; AError: Word);
    begin
    Logit(client.UserName + ' - ' + client.DataSocket.Addr + ' 已经连接');
    end;procedure TFTPServerForm.FtpServer1ClientDisconnect(Sender: TObject;
      Client: TFtpCtrlSocket; AError: Word);
    begin
    Logit(client.UserName + ' - ' + client.DataSocket.Addr + ' 断开连接');
    end;procedure TFTPServerForm.FtpServer1ClientCommand(Sender: TObject;
      Client: TFtpCtrlSocket; var Keyword, Params, Answer: TFtpString);
    begin
    Logit(client.UserName + ' - ' + client.DataSocket.Addr + ' ' + Keyword + ' ' + client.directory  + params);
    end;procedure TFTPServerForm.bsSkinSpeedButton1Click(Sender: TObject);
    var
      strCaption, strDirectory: string;
      wstrRoot: WideString;
    begin
      strCaption := 'FTP 主目录至...';
      wstrRoot := '';
      SelectDirectory(strCaption, wstrRoot, strDirectory);
      if Strdirectory <> '' then
      begin
        if copy(Strdirectory, Length(StrDirectory), 1) <> '\' then
          StrDirectory := StrDirectory + '\';
          FilenameEdit1.Text :=StrDirectory;
          StartButtonClick(self);
      end;
    end;end.
      

  2.   

    到DEMO看看即可,使用MakeDir()函数即可.