zoukankan      html  css  js  c++  java
  • 如何用idftp遍历整个目录下载、删除_delphi教程

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

  • 相关阅读:
    用于Web开发的8 个最好的跨平台编辑器
    javascript之数组操作
    15 个最佳的 jQuery 表格插件
    使用Backbone构建精美应用的7条建议
    linux内核内存分配(一、基本概念)
    redhat的systemd版本list
    Linux内核crash/Oops异常定位分析方法
    systemd bug: bz1437114 core:execute: fix fork() fail handling in exec_spawn()
    Use gdb attach pid and debug it
    Build rpm example:zram
  • 原文地址:https://www.cnblogs.com/djcsch2001/p/1804902.html
Copyright © 2011-2022 走看看