Ver Mensaje Individual
  #4  
Antiguo 17-12-2004
ciscu ciscu is offline
Miembro
 
Registrado: jun 2003
Ubicación: Granollers
Posts: 114
Reputación: 21
ciscu Va por buen camino
Wink Ya encontré la solución a la lista FTP

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!!!
Responder Con Cita