Fórum Ajuda com FTP e Pastas e SubPastas #336542

21/01/2007

0

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
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

Responder

Posts

29/01/2007

Mmoreira

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+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar