TIdFTP 两个重要函数
项目开发过程中发现,直接对于服务器上的文件/路径进行处理,是很危险的事情,因为一旦文件/路径不存在,程序就会抛异常,影响客户体验。所以在对服务器上的文件/路径进行访问之前,我们一般先判断服务器上是否存在某个路径/文件,然后再进行进一步的处理。
判断服务器上文件或者路径是否存在 FtpDirectoryExists
请看如下代码:
1 function TMainFrm.FtpDirectoryExists(ADir: string): Boolean; 2 var 3 i, Index: Integer; 4 strlist: TStringList; 5 filename: string; 6 b: Boolean; 7 begin 8 Result := false; 9 Index := 0; 10 strlist := TStringList.Create; 11 strlist.Clear; 12 idFTP.List(strlist, ‘‘, True); 13 if strlist.Count > 0 then 14 begin 15 for i := 0 to strlist.Count - 1 do 16 begin 17 filename := trim(strlist.Strings[i]); 18 b := True; 19 while b do 20 begin 21 if Pos(‘ ‘, filename) > 0 then 22 begin 23 filename := Trim(Copy(filename, Pos(‘ ‘, filename), Length(filename))); 24 end; 25 if Pos(‘ ‘, filename) = 0 then b := False; 26 end; 27 if filename = ADir then 28 begin 29 Result := true; 30 Break; 31 end; 32 end; 33 end; 34 strlist.Free; 35 end;
创建FTP路径/文件夹 CreateFtpDir
请看如下代码:
1 procedure TMainFrm.CreateFtpDir(V_Path: string); 2 var 3 i, j, k: Integer; 4 sFtpPath, s: tstringlist; 5 t_Path, sSTR: string; 6 begin 7 sFtpPath := tstringlist.Create; 8 sFtpPath.Clear; 9 sFtpPath.Delimiter := ‘/‘; 10 sFtpPath.DelimitedText := V_Path; 11 idFTP.ChangeDir(‘/‘); 12 //检查目录是否存在,不存在时自动创建 13 for K := 0 to sFtpPath.Count - 1 do 14 begin 15 sSTR := sFtpPath[k]; 16 try 17 if not FtpDirectoryExists(sSTR) then 18 idFTP.MakeDir(sSTR); 19 except 20 on E: Exception do 21 begin 22 null; 23 end; 24 end; 25 idFTP.ChangeDir(sSTR + ‘/‘); 26 end; 27 sFtpPath.Free; 28 end;