RootDir = 要删除的根目录,一般情况下 RemoteDir 与 RootDir 相等}

procedure TForm1.FTP_DeleteAllFiles(var idFTP : TIdFtp;RemoteDir,RootDir : string);

label Files;

var

i,DirCount : integer;

Temp : string;

begin

idFTP.ChangeDir(RemoteDir);

if Pos(RootDir,idFTP.RetrieveCurrentDir) = 0 then Exit;

Files :

idFTP.List(nil);

DirCount := idFTP.DirectoryListing.Count ;

while DirCount = 0 do

begin

Temp := idFTP.RetrieveCurrentDir;

idFTP.ChangeDirUp;

idFTP.RemoveDir(Temp);

idFTP.List(nil);

DirCount := idFTP.DirectoryListing.Count ;

for i := 0 to DirCount - 1 do

if idFTP.DirectoryListing[i].FileName = RootDir then Exit;

end;

for i := 0 to DirCount - 1 do

begin

if Pos(RootDir,idFTP.RetrieveCurrentDir) = 0 then Break ;

if idFTP.DirectoryListing[i].ItemType = ditDirectory then

begin

FTP_DeleteAllFiles(idFTP,idFTP.DirectoryListing[i].FileName,RootDir);

end else begin

idFTP.Delete(idFTP.DirectoryListing[i].FileName);

goto Files ;

end;

end;

end;

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,

IdFTP, StdCtrls, idftplist, ComCtrls, ExtCtrls;

type

Thread1 = class(TThread)

private

FidFTP : TIdFtp;

protected

procedure Execute; override;

public

constructor Create(var idFTP : TIdFtp);

end;

Thread2 = class(TThread)

private

FidFTP : TIdFtp;

protected

procedure Execute; override;

public

constructor Create(var idFTP : TIdFtp);

procedure FTP_DeleteAllFiles(var idFTP: TIdFtp; RemoteDir: string);

end;

TForm1 = class(TForm)

IdFTP1: TIdFTP;

Button1: TButton;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

StatusBar1: TStatusBar;

Timer1: TTimer;

Memo1: TMemo;

Button3: TButton;

Edit4: TEdit;

procedure IdFTP1Connected(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormDestroy(Sender: TObject);

procedure IdFTP1Disconnected(Sender: TObject);

procedure IdFTP1Status(ASender: TObject; const AStatus: TIdStatus;

const AStatusText: String);

procedure Timer1Timer(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Edit4Change(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

function GetPrevDir(dir:string):string;

end;

var

Form1: TForm1;

T1: TThread;

T2: TThread;

implementation

{$R *.dfm}

procedure TForm1.IdFTP1Connected(Sender: TObject);

begin

Button1.Enabled := false;

Timer1.Enabled := true;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

if not IdFTP1.Connected then

begin

Timer1.Enabled := false;

IdFTP1.Tag := 0;

IdFTP1.Host := Edit1.Text;

IdFTP1.Username := Edit2.Text;

IdFTP1.Password := Edit3.Text;

IdFTP1.Port := strtoint(Edit4.Text);

T1 := Thread1.Create(IdFTP1);

end;

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

IdFTP1.Abort;

if IdFTP1.Connected then IdFTP1.Disconnect;

end;

procedure TForm1.IdFTP1Disconnected(Sender: TObject);

begin

Button1.Enabled := true;

if IdFTP1.Tag = 0 then Button1.Click;

end;

procedure TForm1.IdFTP1Status(ASender: TObject; const AStatus: TIdStatus;

const AStatusText: String);

begin

StatusBar1.Panels.Items[0].Text := AStatusText;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

Timer1.Enabled := false;

T2 := Thread2.Create(IdFTP1);

end;

{ Thread1 }

constructor Thread1.Create(var idFTP: TIdFtp);

begin

FidFTP := idFTP;

FreeOnTerminate := True;

inherited Create(false);

end;

procedure Thread1.Execute;

begin

try

FidFTP.Connect(true, -1);

except

end;

end;

{ Thread2 }

constructor Thread2.Create(var idFTP : TIdFtp);

begin

FidFTP := idFTP;

FreeOnTerminate := True;

inherited Create(false);

end;

procedure Thread2.Execute;

begin

try

FTP_DeleteAllFiles(FidFTP, '/');

except

end;

end;

{删除整个ftp目录,包括下面的文件, RemoteDir 要删除的目录}

procedure Thread2.FTP_DeleteAllFiles(var idFTP : TIdFtp; RemoteDir : string);

var

i,DirCount : integer;

Temp : string;

begin

idFTP.ChangeDir(RemoteDir);

Form1.Memo1.Lines.Add('ChangeDir:' + idFTP.RetrieveCurrentDir);

idFTP.List(nil);

DirCount := idFTP.DirectoryListing.Count;

if DirCount = 0 then

begin

try

idFTP.RemoveDir(idFTP.RetrieveCurrentDir);

Form1.Memo1.Lines.Add('Success:' + idFTP.RetrieveCurrentDir);

except

Form1.Memo1.Lines.Add('Failed:' + idFTP.RetrieveCurrentDir);

end;

//上级

Temp := Form1.GetPrevDir(idFTP.RetrieveCurrentDir);

if Temp <> '/' then FTP_DeleteAllFiles(idFTP, Temp);

end;

for i := 0 to DirCount - 1 do

begin

if idFTP.DirectoryListing[i].ItemType = ditDirectory then

begin

delphi 获取java控件位置_delphi的IdFTP控件函数怎么调用相关推荐

  1. JAVA学习第五篇--java中对象的创建过程以及函数的调用过程

    下面本文将详细介绍java语言中对象的创建过程,以及函数的调用过程. class Person{public String name="zhao";public int ege;p ...

  2. WPF 获取鼠标屏幕位置、窗口位置、控件位置

    原文:WPF 获取鼠标屏幕位置.窗口位置.控件位置 public struct POINT{public int X;public int Y;public POINT(int x, int y){t ...

  3. JAVA知识点梳理第四部分——Swing控件

    JAVA整理知识点传送门: JAVA知识点拉理第一部分--常规知识 JAVA知识点梳理第二部分--接口.内部类.异常等等 JAVA知识点梳理第三部分--图形用户界面GUI部分 JAVA知识点梳理第四部 ...

  4. java学习笔记(三):前端miniUI控件库入门

    java学习笔记(三):前端miniUI控件库入门 最近在一家公司实习学习,一上来就需要学习了解相关的前端内容--miniUI.而这个内容自己本身并没有了解学习过,上手也是遇到了不少的问题,于是想把自 ...

  5. html 控件坐标定位,利用JS改变html控件位置

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 利用JS改变html控件位置 我想写一个贪吃蛇小游戏,所以需要完成蛇的自动移动效果,这就需要改变html控件位置.本来我 ...

  6. Qt鼠标相对位置、绝对位置、窗口位置、控件位置、控件大小、控件绝对位置

    目录 坐标系 鼠标位置 控件位置 控件的相对位置 控件绝对位置 控件的大小,rect 窗口位置 窗口的大小 窗口绝对位置 窗口相对位置 总结   在Qt界面开发时,有时需要根据鼠标位置,控件位置来确定 ...

  7. Android获取景点的信息,景点介绍(ListView控件应用)

    1. 案例概述 此案例主要是对ListView列表控件的使用.当应用中包含多项数据,每项数据结构相同,只是内容不同时,可通过列表显示.对于列表中的内容,可以是显示字符串的TextView,也可以是结构 ...

  8. 数据回发时,维护ASP.NET Tree控件位置

    ASP.NET2.0提供了一个功能强大的TreeView控件,但是它看起来有一个缺陷:它好像不能够跟踪用户最后选择的一个节点.如果你滚动到第50个节点然后展开该节点,那么当单击链接页面进行回发后,你必 ...

  9. android控件之间的过渡动画效果,Android - 交换控件位置:基于LayoutParams的瞬间交换与基于ObjectAnimator动画效果交换...

    现需要交换两个控件(本文中是两个RelativeLayout),找到了两个方法: 1.使用LayoutParams改变两个layout的属性,即其相对关系(below等),实现位置的交换,但是并没有交 ...

最新文章

  1. Docker 入门到实践笔记2
  2. android 渠道包 占位符配置,Android打包
  3. 学习笔记——ArrayList总结
  4. sp MySQL 导入_mysql数据导入redis
  5. 本地如何预览php文件上传,如何实现js上传图片本地预览同时支持预览截图的功能...
  6. django 上传文件夹_django上传文件
  7. 第三次学JAVA再学不好就吃翔(part49)--String类的获取功能
  8. 判断一个字符串是否是回文_Python
  9. select下拉列表
  10. 2018 rust卡石头教程_rust地上的石头怎么捡 | 手游网游页游攻略大全
  11. 理解容器中超易混淆 Attach 和 Exec 的异同
  12. 阿里云企业邮箱哪个代理商好
  13. 作品集十(平面设计)
  14. 山海演武传·黄道·第一卷 雏龙惊蛰 第三章 九邪谷
  15. [日推荐]『我的时间线』记录你的生活
  16. 顶级投资机构ARK将区块链列为颠覆式创新技术
  17. ssh无输入密码登录问题
  18. Ghost 8.2 +GHOST使用教程(图+文)
  19. 用计算机打女生节快乐,女生节快乐的朋友圈说说
  20. 超全的 Vue 开源项目合集

热门文章

  1. java 精选选择题_Java生产率提示:社区精选
  2. 存储过程 锁定并发_Java并发教程–锁定:显式锁定
  3. eclipse 扩展_Eclipse扩展的轻量级集成测试
  4. 构建Spring微服务并对其进行Dockerize生产
  5. gradle ant_区分基于Ant目标的Gradle任务
  6. instanceof运算符_Java 8中的instanceof运算符和访客模式替换
  7. 什么是JAX-RS注释? (第2部分)
  8. io和nio的缓冲_IO与NIO –中断,超时和缓冲区
  9. 带有Gluon Ignite和Dagger的JavaFX中的依赖注入
  10. apache mahout_Apache Mahout:入门