利用Indy的TIdFtp控件实现FTP协议
http://tech.ddvip.com 2006年07月31日 社区交流
本文详细介绍利用Indy的TIdFtp控件实现FTP协议
过程说明:
procedure ChangeDir(const ADirName: string);
改变工作目录
属性
const ADirName: string
远程服务器的目录描述
说明:该过程实际上是实现了FTP CWD命令。
procedure ChangeDirUp;
到上一级目录
function RetrieveCurrentDir: string;
该函数返回当前目录名
procedure List(ADest: TStrings; const ASpecifier: string; const ADetails: boolean);
列出当前目录所有文件和子目录及其属性
参数:
ADest: TStrings
保存文件及子目录的返回结果
const ASpecifier: string = ''
文件掩码,用于列出符合条件的文件
const ADetails: boolean = true
包含文件和子目录属性
property DirectoryListing: TIdFTPListItems;
返回文件及目录结构的列表
示例代码:
LS := TStringList.Create;
try
IdFTP1.ChangeDir(DirName);
IdFTP1.TransferType := ftASCII;
CurrentDirEdit.Text := IdFTP1.RetrieveCurrentDir;
DirectoryListBox.Items.Clear;
IdFTP1.List(LS);
DirectoryListBox.Items.Assign(LS);
if DirectoryListBox.Items.Count > 0 then
if AnsiPos('total', DirectoryListBox.Items[0]) > 0 then DirectoryListBox.Items.Delete(0);
finally
LS.Free;
end;
(5)实现下载
在下载之前,必须查看DirectoryListing.Items[sCurrFile].ItemType是否为文件,如返回为ditDirectory则代表当前文件名为目录,不能下载,必须导向到文件才可。如为文件,则可以进行下载。在下载前,设定传输的类型为二进制文件,并且指定本地要保存的路径。通过调用Get方法,实现文件的下载。下载过程较慢,可以考虑将其放到线程中实现。
作者:cokeyang 责编:豆豆技术应用