使用ics编写ftp客户端

本文介绍如何使用Delphi和Clever Internet Suite组件实现FTP客户端功能,包括连接FTP服务器、浏览目录、下载文件等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、下载ics组件:CleverInternetSuitev9.6.923.0.rar-Delphi文档类资源-优快云下载

2、安装。

 

 

 

D:\delphiscrs\Clever Internet Suite v9.6.923.0\Sources\packages\D7;D:\delphiscrs\Clever Internet Suite v9.6.923.0\Sources\common

3、新建工程,按如下放置控件:

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, clTcpClient, clTcpClientTls, clTcpCommandClient, clFtp,
   clFTPUtils, clUtils,ExtCtrls, ComCtrls;

打开ftp服务器 

procedure TForm1.Button1Click(Sender: TObject);
const
  transferTypes: array[Boolean] of TclFtpTransferType = (ttBinary, ttAscii);
begin
  if clFTP.Active then
  begin
    ShowMessage('You are already connected. Please click Logout to disconnect.');
    Exit;
  end;
  clFTP.Port := 21;
  clFTP.Server := edtServer.Text;
  clFTP.UserName := edtUser.Text;
  clFTP.Password := edtPassword.Text;
  clFTP.PassiveMode := cbPassiveMode.Checked;
  clFTP.TransferType := transferTypes[cbAsciiMode.Checked];
  clFTP.Open();
  DoOpenDir('/');
end;

从listbox中选择要下载的文件。 

procedure TForm1.lbListDblClick(Sender: TObject);
begin
    if (lbList.ItemIndex > -1) and
    (lbList.Items[lbList.ItemIndex] <> '') and
    (lbList.Items[lbList.ItemIndex][1] = '/') then
  begin
    DoOpenDir(clFTP.CurrentDir + lbList.Items[lbList.ItemIndex]);
  end;
end;

下载:

procedure TForm1.Button3Click(Sender: TObject);
var
  size, position, fileExistsResult: Integer;
  stream: TStream;
begin
  if (lbList.ItemIndex > -1) and
    (lbList.Items[lbList.ItemIndex] <> '') and
    (lbList.Items[lbList.ItemIndex][1] <> '/') then
  begin
    SaveDialog.FileName := lbList.Items[lbList.ItemIndex];
    if SaveDialog.Execute() then
    begin
      size := clFTP.GetFileSize(lbList.Items[lbList.ItemIndex]);
      position := 0;
      stream := nil;
      try
        begin
          stream := TFileStream.Create(SaveDialog.FileName, fmCreate);
        end;
        ProgressBar.Min := 0;
        ProgressBar.Max := size;
        ProgressBar.Position := position;
        clFTP.GetFile(lbList.Items[lbList.ItemIndex], stream, position, -1);
        ShowMessage('Done');
      finally
        stream.Free();
      end;
    end;
  end;
end;

用到的函数:

procedure TForm1.DoOpenDir(const ADir: string);
var
  dir: string;
begin
  dir := ADir;
  if (Length(dir) > 1) and (dir[1] = '/') and (dir[2] = '/') then
    system.Delete(dir, 1, 1);
  clFTP.ChangeCurrentDir('/');
  clFTP.ChangeCurrentDir(dir);
  FillDirList();
end;
procedure TForm1.FillDirList;
begin
  lbList.Items.BeginUpdate();
  try
    lbList.Items.Clear();
    clFTP.DirectoryListing();
  finally
    lbList.Items.EndUpdate();
  end;
  lbList.Sorted := False;
  lbList.Sorted := True;
end;
procedure TForm1.FillDirList;
begin
  lbList.Items.BeginUpdate();
  try
    lbList.Items.Clear();
    clFTP.DirectoryListing();
  finally
    lbList.Items.EndUpdate();
  end;
  lbList.Sorted := False;
  lbList.Sorted := True;
end;

ftp组件触发加载事件:

procedure TForm1.clFtpDirectoryListing(Sender: TObject;
  AFileInfo: TclFtpFileInfo; const Source: String);
const
  dirPrefix: array[Boolean] of string = ('', '/');
begin
  lbList.Items.Add(dirPrefix[AFileInfo.IsDirectory or AFileInfo.IsLink] + AFileInfo.FileName);
end;

关闭ftp服务端链接:

procedure TForm1.Button2Click(Sender: TObject);
begin
  clFTP.Close();
  lbList.Items.Clear();
end;

效果界面:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值