用TlistView 显示TIdFtp 目录列表

在使用idftp组件的时候,目录列表的显示,是个比较大的问题,在indy9的demo中,使用的是headercontrol+listbox,然后处理listbox的drawitem事件,看起来,也不简单。

由于indy10的demo少得可怜,特说明如下:其中,indy10,listview使用的是raize component 5的控件,跟标准控件可能有部分差异。

方法:

首先,在连接上服务器后,调用idftp的list函数,获取文件列表

其中,list的函数,

procedure List( ADest: TIdStrings, const ASpecifier: string = ”, ADetails: Boolean = True ); overload;

可以根据简单的表达式过滤,如下,就只显示出zip文件,AFiles存储了文件列表

AFiles := TIdStringList.Create;
AFtp.List(AFiles, ‘*.zip’, True);
if AFtp.DirectoryListing.Count <> 0 then
begin
   FillDirListView(AFtp.DirectoryListing)
end;

其实,idftp的ListResult属性也保存了相应的列表,完全可以忽略list函数中的该参数

继续阅读

利用Indy的TIdFtp控件实现FTP协议[转]

现在很多应用都需要上传与下载大型文件,通过HTTP方式上传大文件有一定的局限性。幸好FTP作为一个非常老而且非常成熟的协议可以高效稳定地完 成大文件的上传下载,并且可以完美地实现续传。就拿我写的电影服务器管理端程序来说,各种方案比较后,发现使用FTP可以完美地实现要求。但是要通过 WinSocket库实现FTP比较麻烦,幸好有Indy–一个包装了大多数网络协议的组件包。

通过Indy,程序设计人员可以通过阻塞方式进行编程,可以抛开蹩脚的Winsocket异步模式,采用与Unix系统上等同的阻塞编程模式进行。这样,程序员就可以很好的处理程序的运行流程。 下面,我们进入到Indy的TIdFtp世界。

1.控件的说明

使用Indy 9中的TIdFtp控件可以实现通过FTP方式进行文件的上传与下载。

2.控件的具体使用

(1)控件属性设置

默认属性即可,与服务器连接直接相关的属性如主机名与用户等在建立连接时进行设定。需要设定的是RecvBufferSize和SendBufferSize两属性的值。另外需要根据要传输的文件类型指定TransferType属性,而其他属性按默认值设定即可。

RecvBufferSize说明(默认值为8192字节):该属性为整型变量,用于指定连接所用的接受缓冲区大小。

SendBufferSize说明(默认值为32768字节):该属性也为整型变量,用于指定连接所用的发送缓冲区的最大值。该属性在 WriteStream方法中时,可用于TStream指定要发送内容的块数。如果要发送的内容大于本属性值,则发送内容被分为多个块发送。

TransferType说明(默认值为ftBinary):该属性为TIdFTPTransferType型变量。用于指定传输内容是二进制 文件(ftBinary )还是ASCII文件(ftASCII)。应用程序需要使用二进制方式传输可执行文件、压缩文件和多媒体文件等;而使用ASCII方式传输文本或超文本等 文本型数据。

继续阅读