如何用idftp遍历整个目录—-下载、删除_delphi教程

如何用idftp遍历整个目录—-下载、删除_delphi教程如何用idftp遍历整个目录—-下载、删除_delphi教程unitUnit1;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,IdBaseComponent,IdComponent,IdTCPConn…

大家好,又见面了,我是你们的朋友全栈君。

如何用idftp遍历整个目录—-下载、删除_delphi教程

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,IdFTPList,
  IdTCPClient, IdFTP ;

type
  TForm1 = class(TForm)
    Btt_DownLoadDir: TButton;
    IdFTP1: TIdFTP;
    Btt_DeleteDir: TButton;
    Label1: TLabel;
    lb_num: TLabel; //处理文件个数提示。
    procedure Btt_DownLoadDirClick(Sender: TObject);
    procedure Btt_DeleteDirClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ 下载整个目录,并遍历所有子目录

  首先 ChangeDir(Root) 到根目录

  然后创建本地目录 + RemoteDir

  然后用 list 得到所有目录名

  循环判断,进入 RemoteDir 目录内部

  如果是目录继续第归。否则 get 该文件到本地目录,当 get 完所有文件后返回上一级目录

  用List再取得信息,继续循环

 }

procedure FTP_DownloadDir(var idFTP : TIdFtp;RemoteDir,LocalDir : string);

label Files ;

var

  i,DirCount : integer;

begin

  if not DirectoryExists(LocalDir + RemoteDir) then

    ForceDirectories(LocalDir + RemoteDir);

  idFTP.ChangeDir(RemoteDir);

  idFTP.List(nil);

  DirCount := idFTP.DirectoryListing.Count ;

  if DirCount = 0 then

  begin

    idFTP.ChangeDirUp;

    idFTP.List(nil);

  end;

  for i := 0 to DirCount – 1 do

  begin

    if DirCount <> idFTP.DirectoryListing.Count then

    begin

      repeat

        idFTP.ChangeDirUp;

        idFTP.List(nil);

      until DirCount = idFTP.DirectoryListing.Count ;

    end;

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

      FTP_DownloadDir(idFTP,idFTP.DirectoryListing[i].FileName,LocalDir + RemoteDir + \)

    else begin

      idFTP.Get(idFTP.DirectoryListing[i].FileName,LocalDir + RemoteDir + \ +

        idFTP.DirectoryListing[i].FileName,true);

      Form1.lb_num.Caption := IntToStr(StrToInt(Form1.lb_num.Caption) + 1);

      Form1.lb_num.Update;

      if i = DirCount – 1 then

      begin

        idFTP.ChangeDirUp;

        idFTP.List(nil);

      end;

    end;

  end;

end;

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

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

procedure 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);

      Form1.lb_num.Caption := IntToStr(StrToInt(Form1.lb_num.Caption) + 1);

      Form1.lb_num.Update;

      goto Files ;

    end;

  end;

end;

procedure TForm1.Btt_DownLoadDirClick(Sender: TObject);

begin

  IdFTP1.Connect(true,-1);

  if IdFTP1.Connected then

  begin

    IdFTP1.ChangeDir(bigimage);

    FTP_DownloadDir(IdFTP1,1002.1002.1002,g:\ftpdir\);

  end;

  IdFTP1.Disconnect ;

end;

procedure TForm1.Btt_DeleteDirClick(Sender: TObject);

begin

  IdFTP1.Connect(true,-1);

  if IdFTP1.Connected then

  begin

    IdFTP1.ChangeDir(bigimage);

    FTP_DeleteAllFiles(IdFTP1,1002.1002.1002,1002.1002.1002);

  end;

  IdFTP1.Disconnect ;

end;

end.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/150399.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • python爬虫–selenium模块

    python爬虫–selenium模块

  • Python机器学习笔记:不得不了解的机器学习面试知识点(1)[通俗易懂]

    Python机器学习笔记:不得不了解的机器学习面试知识点(1)[通俗易懂]机器学习岗位的面试中通常会对一些常见的机器学习算法和思想进行提问,在平时的学习过程中可能对算法的理论,注意点,区别会有一定的认识,但是这些知识可能不系统,在回答的时候未必能在短时间内答出自己的认识,因

  • 自带win10系统换win7的那些坑

    自带win10系统换win7的那些坑自带win10系统换win7的那些坑 这两天真是经历了一个换系统的巨坑。如果说这次换系统是一部历史的话那也一定是一部血泪史。今日4000多字的记录会把这部血泪史中的血和泪一一道出。不为别的只为:前车之鉴后事之师! 首先我对win10系统本身就很不喜欢,因为它不稳定兼容性差,还经常更新,用户总是给微软当小白鼠进行测试系统。之前就一直吐槽win10的自动更新无法…

  • linux设置node环境变量,Linux 安装最新 Node.js 并配置环境变量「建议收藏」

    linux设置node环境变量,Linux 安装最新 Node.js 并配置环境变量「建议收藏」今天准备在服务器上构建一个前端项目,我的服务器用的Linux是CentOS7,我通过Yum安装了Nodejs。在运行构建命令的时候出现了一堆错误信息,项目也无法成功构建,其中的一段错误信息如下:npmERR!Makesureyouhavethelatestversionofnode.jsandnpminstalled.我使用node-v查看了一下No…

  • 2019的10个最佳WordPress画廊插件

    2019的10个最佳WordPress画廊插件在视觉文化时代,如果您的网站包含图片,则它会获得更多的观看次数。研究表明,如果带有照片或视频,您的内容将获得更好的好评。这很有意义,因为大多数人都以视觉为导向,而我们的大脑在视觉上比在文本中更快地处理和理解事物。不仅如此,大多数人都可以在带有图像的情况下更好地处理和理解文本。这就是为什么显示网站上的照片或视频会使内容的参与度提高70%以上的原因。这也是同样的原因,如果您包含图…

  • pycharm上传代码到gitlab_pycharm配置git

    pycharm上传代码到gitlab_pycharm配置git让git忽略掉一些文件(.gitignore)#pycharm.idea/.DS_Store__pycache__/*.py[cod]*$py.class#Djangostuff:local_settings.py*.sqlite3#databasemigrations*/migrations/*.py!*/migrations/__init__.pygit管理项目

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号