(3)连接远程服务器
完成了设定控件属性和实现了控件的事件响应后,就可以与服务器进行交互和传输了。在连接之前,应首先判断IdFtp是否处于连接状态,如果Connected为False,则通过界面控件或其他方式指定与服务器连接相关的一些TCP类属性的设置,分别是:Host(主机名):String、Username(用户名):String、Password(密码):String,也可以指定Port(端口)。之后调用Connect方法连接远程服务器,如果无异常出现则连接成功建立。
过程说明:procedure Connect(AAutoLogin: boolean; const ATimeout: Integer);
该过程连接远程FTP服务器
属性:AAutoLogin: boolean = True
连接后自动登录,该参数默认为True。
const ATimeout: Integer = IdTimeoutDefault
超时时间,单位:秒。
示例代码:
if IdFTP1.Connected then try
if TransferrignData then IdFTP1.Abort;
IdFTP1.Quit;
finally
end
else with IdFTP1 do try
Username := UserIDEdit.Text;
Password := PasswordEdit.Text;
Host := FtpServerEdit.Text;
Connect;
ChangeDir(CurrentDirEdit.Text);
finally
end;
(4)改变目录
连接建立后,可以改变当前FTP会话所在的目录。对于已知绝对路径的情况下,可以直接调用ChangeDir(const ADirName: string)方法来转换目录,ADirName表示服务器上的文件系统目录,另外还可以调用ChangeDirUp回到上级目录。
如果未知路径,则可以通过List(ADest: TStrings; const ASpecifier: string; const ADetails: boolean)过程获取远程服务器的当前目录结构,此时必须设定TransferType为ftASCII(ASCII模式),其中:ADest保存当前目录结构,可以在后续程序中调用该列表。另外可以通过RetrieveCurrentDir方法获取当前目录名。
过程说明:
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)下载的实现