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;
效果界面: