Bueno, hermanos del delphi, hallé un modo para listar todo el sitio FTP, con todos los archivos y carpetas, de modo
recursivo; para quien le interese, aquí os escribo el código, para asi compensar un poco todas las veces que me habeis ayudado:
Código:
uses WinInet;
procedure TForm1.Button1Click(Sender: TObject);//para crear listado en un Tlistbox
var Carpeta:string;
begin
listbox1.items.clear;
Carpeta:='/';
Busca(Carpeta);
end;
procedure TForm1.Busca(Carpeta:string);
var FindData: TWin32FindData;
CondicionBusqueda, FTPConexion, InternetConexion: HInternet;
begin
InternetConexion:=InternetOpen('iexplorer', // programa que se conecta a internet
INTERNET_OPEN_TYPE_PRECONFIG, // tipo de acceso a internet
nil, // nombre del proxy
nil, //ni idea (¡CON PERDON!)
0);
IF InternetConexion=nil then showmessage('No se reconoce el servidor');
FTPConexion := InternetConnect(InternetConexion,PChar('ftp.servidor.com'), //servidor FTP
INTERNET_DEFAULT_FTP_PORT, // (INTERNET_DEFAULT_FTP_PORT),PChar(edit1.text), // nombre del usuario, normalmente anónimo
PChar(edit2.text), // contraseña
INTERNET_SERVICE_FTP, // FTP ó HTTP
0, // 0 ó INTERNET_FLAG_PASSIVE
0);// (ni p... idea perdón otra vez!)
CondicionBusqueda := FtpFindFirstFile(FTPConexion pchar(inclourebarres(Carpeta+'*.*')),FindData, 0, 0);
if CondicionBusqueda = nil then begin
showmessage('No hi ha arxius que compleixin la condició');
Exit;
end;
repeat
if (FindData.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY)and(FindData.cFileName[0]<>'.')and(FindData.cFileName[1]<>'.') then
Busca(Carpeta+inclourebarres(finddata.cFileName))
else
begin
if(FindData.cFileName[0]='.')and(FindData.cFileName[1]='.')then
listbox1.items.add(Carpeta)
else
listbox1.items.add(FindData.cFIlename);
end;
until not InternetFindnextFile(CondicionBusqueda, @FindData);
InternetCloseHandle(CondicionBusqueda);
end;
function TForm1.PathDelimitador(const S: string; Index: Integer): Boolean;
begin
Result := (Index > 0) and (Index <= Length(S)) and (S[Index] = '/')
and (ByteType(S, Index) = mbSingleByte);
end;
function TForm1.IncloureBarres(const S: string): string;
begin
Result := S;
if not PathDelimitador(Result, Length(Result)) then Result := Result + '/';
end;
Espero que a alguien le sirva!
Saludos y feliz Navidad a todos!!!