Delphi - TIdFTP 两个重要函数

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;

原文地址:https://www.cnblogs.com/jeremywucnblog/p/11491024.html

时间: 2024-10-13 10:23:50

Delphi - TIdFTP 两个重要函数的相关文章

Delphi中的操作二进制文件的两个重要函数

Delphi中的操作二进制文件的两个重要函数 对于通过Byte数组进行文件操作的,在FTP中经常会使用到,我也是在Delphi调用Web Service进行文件的上传和下载时找到这两个函数的,挺好用的,推荐给大家.(申明:非本人所写) 1. 将Byte数组生成文件 procedure ByteArrayToFile(const ByteArray : TByteDynArray; const FileName : string );var Count: integer; F: FIle of B

delphi 合并两个 Wav 文件流的函数

delphi 合并两个 Wav 文件流的函数 合并两个 Wav 文件的函数 实例一 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); e

Delphi(procedure&procedure .... of object )函数指针与方法指针 .

Delphi(procedure&procedure .... of object )函数指针与方法指针 . delphiobjectbuttonintegerdelphi中经常见到以下两种定义 Type TMouseProc = procedure (X,Y:integer); TMouseEvent = procedure (X,Y:integer) of Object; 两者样子差不多但实际意义却不一样, TMouseProc只是单一的函数指针类型; TMouseEvent是对象的函数指针

Delphi反汇编内部字符串处理函数/过程不完全列表

Delphi反汇编内部字符串处理函数/过程不完全列表 名称 参数 返回值 作用 等价形式 / 备注   _PStrCat EAX :目标字符串 EDX :源字符串 EAX 连接两个 Pascal 字符串 s:=copy(s+s1,1,255)   _PStrNCat EAX :目标字符串 EDX :源字符串 CL :结果字符串最大长度 EAX 连接两个 Pascal 字符串 s:=copy(s+s1,1,n)   _PStrCpy EAX :目标字符串 EDX :源字符串 EAX Pascal

Delphi 之路 — 文件操作函数 (说明和使用说明)

Delphi 之路 - 文件操作函数 (说明和使用说明) //判断文件是否存在 FileExists //判断文件夹是否存在 DirectoryExists //删除文件 DeleteFile; Windows.DeleteFile //删除文件夹 RemoveDir; RemoveDirectory //获取当前文件夹 GetCurrentDir //设置当前文件夹 SetCurrentDir; ChDir; SetCurrentDirectory //获取指定驱动器的当前路径名 GetDir

javascript两种声明函数的方式的一次深入解析

声明函数的方式 javascript有两种声明函数的方式,一个是函数表达式定义函数,也就是我们说的匿名函数方式,一个是函数语句定义函数,下面看代码: /*方式一*/ var FUNCTION_NAME = function() { /* FUNCTION_BODY */}; /*方式二*/ function FUNCTION_NAME () { /* FUNCTION_BODY */}; 区别一 方式一的声明方式是先声明后使用 方式二的声明方式可以先调用,后声明 /*方式一: *先声明后使用 *

JS里面的两种运动函数

最新学了一个新的运动函数,与最初学习的有所不同,第一个运动是根据运动速度完成运动 ,第二个则是根据运动的时间来完成运动,而且把之前的函数都进行了一些兼容处理,在这里列出了看一下: 第一种animate1 1 function animate1(obj,data,rate,fn){//运动对象,运动数据,[运动速度],[回调函数] 2 //遍历获取样式属性 3 for(var key in data){ 4 //通过闭包将key私有化 5 (function(k){ 6 /* 7 获得样式宽高等会

Delphi版的Base64转换函数(修改版)

Delphi版的Base64转换函数(修改版) 重新组织编写Delphi的MD2.MD4.MD5类

简单的自绘CListBox,重载虚MeasureItem和DrawItem这两个虚函数

[cpp] view plain copy //例如CNewListBox继承自CListBox,重载虚MeasureItem和DrawItem这两个虚函数,代码如下: void CNewListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { // TODO: Add your code to draw the specified item ASSERT(lpDrawItemStruct->CtlType == ODT_LISTBOX); L