在delphi中用indy实现FTP上传 下载的例子
2006-06-09 15:49
232 查看
以前总认为FTP程序实现很困难,但后来在网上查看了相关的帖子后发现原来用delphi实现FTP上传与下载竟如此容易,确实对我鼓舞很大。
由于delphi本身自带了indy控件,因此用这些控件实现网络编程即快又容易。尽管如此,我还是极大地鼓励自己查看FTP底层是如何实现的,但就目前而言,indy控件还是一个非常不错的选择。
针对indy的强大,我还是决定将这段代码帖出来,主要是方便自己日后复习、查询。
Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdFTP;
type
TForm1 = class(TForm)
IdFTP1: TIdFTP;
Button1: TButton;
Memo1: TMemo;
Edit1: TEdit;
Button2: TButton;
Label1: TLabel;
Button3: TButton;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure IdFTP1Status(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: String);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses IdFTPList, IdFTPCommon;
{$R *.dfm}
{
本程序是一个ftp demo程序,我用windows信息服务在本机建立了一个ftp服务,
本机IP:192.168.10.99
用户名:cc
密码:1
}
procedure TForm1.Button1Click(Sender: TObject);
var
tr : Tstrings;
begin //连接
tr := TStringlist.Create;
IdFTP1.Host := '192.168.10.99'; //FTP服务器地址
IdFTP1.Username := 'cc'; //FTP服务器用户名
IdFTP1.Password := '1'; //FTP服务器密码
IdFTP1.Connect(); //连接到ftp
Edit1.Text := IdFTP1.RetrieveCurrentDir;//得到初始目录
IdFTP1.ChangeDir('client'); //进入到client子目录
//IdFTP1.ChangeDir('..'); //回到上一级目录
IdFTP1.List(tr); //得到client目录下所有文件列表
Memo1.Lines.Assign(tr);
tr.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
tt :TIdFTPListItems;
t : TIdFTPListItem;
i : integer;
tfname : String;
begin //下载
Label1.Caption := IdFTP1.DirectoryListing.Items[0].FileName;
IdFTP1.TransferType := ftBinary; //指定为二进制文件 或文本文件ftASCII
for i:=0 to IdFTP1.DirectoryListing.Count-1 do
begin
tt := IdFTP1.DirectoryListing; //得到当前目录下文件及目录列表
t := tt.Items[i]; //得到一个文件相关信息
Label1.Caption :=t.Text; //取出一个文件信息内容
tfname := t.FileName;
showmessage(t.OwnerName+' '+t.GroupName+' '+t.FileName+' '+t.LinkedItemName);
if IdFTP1.DirectoryListing.Items[i].ItemType = ditFile then //如果是文件
begin
IdFTP1.Get(tfname,'d:/FTPtest/'+tfname,True,True); //下载到本地,并为覆盖,且支持断点续传
end;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
fi : string;
begin //上传
if OpenDialog1.Execute then
begin
fi := OpenDialog1.FileName;
IdFTP1.Put('f:/测试文档样本.rar','测试文档样本.rar');//上传,
end;
end;
procedure TForm1.IdFTP1Status(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: String);
begin
{case AStatus of
hsResolving : showmessage('hsResolving');
hsConnecting: showmessage('hsConnecting');
hsConnected: showmessage('hsConnected');
hsDisconnecting: showmessage('hsDisconnecting');
hsDisconnected: showmessage('hsDisconnected');
hsStatusText: showmessage('hsStatusText');
ftpTransfer: showmessage('文件传送完毕。');
ftpReady: showmessage('准备传送文件....');
ftpAborted: showmessage('传送失败');
end; }
//showmessage(AStatusText);
end;
end.
由于delphi本身自带了indy控件,因此用这些控件实现网络编程即快又容易。尽管如此,我还是极大地鼓励自己查看FTP底层是如何实现的,但就目前而言,indy控件还是一个非常不错的选择。
针对indy的强大,我还是决定将这段代码帖出来,主要是方便自己日后复习、查询。
Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdFTP;
type
TForm1 = class(TForm)
IdFTP1: TIdFTP;
Button1: TButton;
Memo1: TMemo;
Edit1: TEdit;
Button2: TButton;
Label1: TLabel;
Button3: TButton;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure IdFTP1Status(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: String);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses IdFTPList, IdFTPCommon;
{$R *.dfm}
{
本程序是一个ftp demo程序,我用windows信息服务在本机建立了一个ftp服务,
本机IP:192.168.10.99
用户名:cc
密码:1
}
procedure TForm1.Button1Click(Sender: TObject);
var
tr : Tstrings;
begin //连接
tr := TStringlist.Create;
IdFTP1.Host := '192.168.10.99'; //FTP服务器地址
IdFTP1.Username := 'cc'; //FTP服务器用户名
IdFTP1.Password := '1'; //FTP服务器密码
IdFTP1.Connect(); //连接到ftp
Edit1.Text := IdFTP1.RetrieveCurrentDir;//得到初始目录
IdFTP1.ChangeDir('client'); //进入到client子目录
//IdFTP1.ChangeDir('..'); //回到上一级目录
IdFTP1.List(tr); //得到client目录下所有文件列表
Memo1.Lines.Assign(tr);
tr.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
tt :TIdFTPListItems;
t : TIdFTPListItem;
i : integer;
tfname : String;
begin //下载
Label1.Caption := IdFTP1.DirectoryListing.Items[0].FileName;
IdFTP1.TransferType := ftBinary; //指定为二进制文件 或文本文件ftASCII
for i:=0 to IdFTP1.DirectoryListing.Count-1 do
begin
tt := IdFTP1.DirectoryListing; //得到当前目录下文件及目录列表
t := tt.Items[i]; //得到一个文件相关信息
Label1.Caption :=t.Text; //取出一个文件信息内容
tfname := t.FileName;
showmessage(t.OwnerName+' '+t.GroupName+' '+t.FileName+' '+t.LinkedItemName);
if IdFTP1.DirectoryListing.Items[i].ItemType = ditFile then //如果是文件
begin
IdFTP1.Get(tfname,'d:/FTPtest/'+tfname,True,True); //下载到本地,并为覆盖,且支持断点续传
end;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
fi : string;
begin //上传
if OpenDialog1.Execute then
begin
fi := OpenDialog1.FileName;
IdFTP1.Put('f:/测试文档样本.rar','测试文档样本.rar');//上传,
end;
end;
procedure TForm1.IdFTP1Status(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: String);
begin
{case AStatus of
hsResolving : showmessage('hsResolving');
hsConnecting: showmessage('hsConnecting');
hsConnected: showmessage('hsConnected');
hsDisconnecting: showmessage('hsDisconnecting');
hsDisconnected: showmessage('hsDisconnected');
hsStatusText: showmessage('hsStatusText');
ftpTransfer: showmessage('文件传送完毕。');
ftpReady: showmessage('准备传送文件....');
ftpAborted: showmessage('传送失败');
end; }
//showmessage(AStatusText);
end;
end.
相关文章推荐
- 在delphi中用indy实现FTP上传 下载的例子
- 利用Indy的TIdFtp控件实现FTP协议, 远程下载上传文件
- JAVA中使用FTPClient实现文件上传下载(键人岐)
- java实现ftp的文件上传和下载
- [转]文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1
- 使用FtpClient类实现FTP文件上传下载
- Java实现Ftp上传和下载文件(依赖commons-net-3.3.jar)--FTPUtil.java
- Java 利用Apache Commons Net 实现 FTP文件上传下载
- 本周的小任务:(java编程实现)网站上的文件下载后,再FTP上传
- vc实现简单的ftp上传和下载功能
- delphi 实现文件http上传下载
- java实现FTP的上传及下载
- Domino LotusScript代码实现Ftp上传、下载
- python实现的ftp自动上传下载程序(支持目录递归操作)----转
- java实现文件上传下载至ftp服务器
- Linux使用Shell脚本实现ftp的自动上传下载
- java实现FTP多线程断点续传,上传下载!
- Linux使用Shell脚本实现ftp的自动上传下载
- 下面是一个使用FTPClient来实现的FTP上传和下载的功能
- Delphi实现Ftp客户端下载(支持断点续传,多线程传输)