如何用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.

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vscode设置终端_vscode 关联PDF

    vscode设置终端_vscode 关联PDFhttps://blog.csdn.net/qq_36743482/article/details/103487025

    2025年5月27日
    3
  • createthread dll「建议收藏」

    createthread dll「建议收藏」CreateThreadapi内部会调用waitforsingleobject等待互斥量对象。目的是同步顺序执行dll初始化。当该方法创建完线程内核对象和线程盏后,该函数内部会调用进程映射中所有dll的dllmain方法进行初始化。因此在自己写的dll中不要创建线程并使用waitforsingleobject等待线程创建。因为如果A线程创建的时候调用了dll中的dllmain函数,并且该

    2022年7月11日
    14
  • AMD CPU电脑安装Android Studio详细步骤以及无法成功install HAXM的解决办法「建议收藏」

    AMD CPU电脑安装Android Studio详细步骤以及无法成功install HAXM的解决办法「建议收藏」想做个手机APP,安装Androidstudio遇到了各种各样的问题,这一切都源于电脑CPU是AMD的,经过各种各样方法的探索,终于找到了解决办法,成功安装了Andriodstudio及模拟器并成功运行了第一个程序Helloworld!下载Androidstudio国外网站下载比较慢,这里推荐一个下载网站,里面的资源很全,包括Android开发的AndroidSDK,开发中遇到的工…

    2022年6月28日
    173
  • 更新python3.6可能使用的依赖

    更新python3.6可能使用的依赖

    2022年3月12日
    46
  • HTML 下拉列表框<select>

    HTML 下拉列表框<select>newdocument 籍贯A 北京 河北 上海 籍贯B 海淀 东城 西城 朝阳

    2025年8月18日
    4
  • java的英文文献综述_java英文参考文献.doc[通俗易懂]

    java的英文文献综述_java英文参考文献.doc[通俗易懂]java英文参考文献环境风水学论文参考文献(一)摘要:中国传统人居环境文化,俗称风水,是中国人居环境的艺术。中国传统人居环境文化历经千年而不衰,归功于其坚实的理论基础和强大的现实适用性。风水作为一种东方文化特有的思维方式,不仅体现在中国城市、庙宇、乡村、道路、住宅的选址和规划布局中,而且渗透、积淀为中国人心理层面上的审美文化取向,成为中国人的基因。丁文剑《现代建筑与古代风水》上海东华大学出版社…

    2022年9月30日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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