Ajuda com FTP e Pastas e SubPastas

Delphi

21/01/2007

por favor eu achei esse codigo no Clube ele é quase o que eu preciso só que não esotu conseguindo ajustar ele....

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, IdBaseComponent, IdComponent,IdTCPConnection,
  IdTCPClient, IdFTP, ComCtrls,IdIntercept,IdAntiFreezeBase, IdAntiFreeze,
  IdLogBase, IdLogDebug, IdGlobal,  IdLogEvent, IdFTPCommon, IdFTPList,
  Buttons;


type
  TForm1 = class(TForm)
    btnListar: TButton;
    IdFTP1: TIdFTP;
    btnConectar: TButton;
    btnDesconectar: TButton;
    ListDiretorios: TListBox;
    procedure btnListarClick(Sender: TObject);
    procedure ListarDir;
    procedure btnConectarClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnDesconectarClick(Sender: TObject);
  private
    procedure Listar(dir: string);
    { Private declarations }
  public
    { Public declarations } 
  end;

var
 Form1: TForm1; 
  i : integer; 
  NomePastaBase,PastaBase,Diretorio, Dir: String; 
  Valores : TStrings;

implementation

{$R *.dfm}


procedure TForm1.ListarDir; 
begin 
  i := 0;
  with IdFTP1 do
      begin
      List(nil);
      while i < DirectoryListing.Count do
       begin
         if DirectoryListing.Items[i].ItemType <> ditDirectory then
             Get(DirectoryListing.Items[i].FileName, dir+DirectoryListing.Items[i].FileName, true)
         else
           begin
             NomePastaBase:= copy(RetrieveCurrentDir,length(PastaBase)+1,length(RetrieveCurrentDir));
             ListDiretorios.Items.Add(NomePastaBase+´/´+DirectoryListing.Items[i].FileName);
             if not DirectoryExists(dir+DirectoryListing.Items[i].FileName) then
               ForceDirectories(dir+DirectoryListing.Items[i].FileName);
           end;
        i := i+1;
       end;

       while ListDiretorios.Items.Count - 1 >= 0 do
        begin
          ChangeDir(PastaBase+ListDiretorios.Items[0]);
          Diretorio := ListDiretorios.Items[0]+´/´;
          ListDiretorios.Items.Delete(0);
          listar(Diretorio);
        end;
        end;
end;


procedure TForm1.Listar(dir : string);
begin
  with IdFTP1 do
      begin
      List(nil);
      while i < DirectoryListing.Count do
       begin
         if DirectoryListing.Items[i].ItemType <> ditDirectory then
           begin
            Get(IdFTP1.DirectoryListing.Items[i].FileName, dir+dir+DirectoryListing.Items[i].FileName, true);
           end
         else
           begin
             NomePastaBase:= copy(RetrieveCurrentDir,length(PastaBase)+1,length(RetrieveCurrentDir));
             ListDiretorios.Items.Add(NomePastaBase+´/´+DirectoryListing.Items[i].FileName);
             if not DirectoryExists(dir+DirectoryListing.Items[i].FileName) then
               ForceDirectories(dir+DirectoryListing.Items[i].FileName)
           end;
        i := i+1;
       end;
       end;
end; 



procedure TForm1.btnListarClick(Sender: TObject);
begin
  ListarDir();
  Showmessage(´Transferência Concluída´);
end;

procedure TForm1.btnConectarClick(Sender: TObject);
begin
      with IdFTP1 do
        begin
        Host := (´ftp.netcrc.ddns.com.br´);
        Username := (´teste´);
        Password := (´teste´);
        Passive := True;
        Connect(true);
        PastaBase := RetrieveCurrentDir;

       end;

btnListar.Enabled := true;
btnConectar.Enabled := false;
btnDesconectar.Enabled := true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Dir:=(´C:\ftp\´);
end;

procedure TForm1.btnDesconectarClick(Sender: TObject);
begin
      with IdFTP1 do
        begin
        Disconnect();
        end;
btnListar.Enabled := false;
btnConectar.Enabled := true;
btnDesconectar.Enabled := false;
end;

end.


o que ocorre:
eu tenho de baixar via FTP arquivos Pastas e SubPastas
Exemplo:
project.exe
V 7.1.22.ver
Diretóorio/SubDiretório/Arquivo.txt
Diretóorio/SubDiretório/Arquivo2.txt

esse código baixa mas não vem tudo de uma vez e se vem as subpastas ficam fora da pasta raiz dela
Exemplo:
project.exe
V 7.1.22.ver
Diretóorio/
SubDiretório/
Arquivo.txt
Arquivo2.txt

por favor alguém pode me dar um help nesse código ou me mostrar outro que funcione.....


Crcam

Crcam

Curtidas 0

Respostas

Mmoreira

Mmoreira

21/01/2007

Pessoal,
Tambem estou tendo este problema.
Preciso fazer o download de todos os arquivos, pastas e subpastas que estiver no meu FTP.
Andei procurando e parece que o Indy 10 não faz isso por ele mesmo, no caso teria que fazer um procedure recursiva para varer pasta por pasta.
Tem uma procedure que encontrei aqui mesmo no forum que varre pastas e subpastas de um diretorio informado mas a mesma tecnica nao da pra ser implementada usando o IdFTP.
Alguem ja fez isso ???
Fico ai no aguardo.
T+


GOSTEI 0
POSTAR