Ver Mensaje Individual
  #4  
Antiguo 23-02-2023
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Reputación: 11
bucanero Va camino a la fama
hola a todos!!

al hacer el list, para obtener el listado de ficheros, dependiendo del parámetro true/false que le pongas, obtienes solo el nombre de los ficheros/directorios u obtienes un listado mas completo de pares de valores, separados por comas con las características del fichero (tamaño, permisos, propietario, etc).
Si tienes certeza que en la ruta no contiene subdirectorios usando el parámetro false seria suficiente, pero si ya tienes subdirectorios entonces tienes que usar si o si el LIST con el parámetro a true.

Aquí te dejo este código de ejemplo que te puede ayudar

Código Delphi [-]
  function ExtractFTPFiles(FTPList: TStrings): TArray<string>;
  var
    fileInfo: string;
    ParseInfo: TStringList;
  begin
    try
      result := [];
      ParseInfo := TStringList.Create;
      ParseInfo.Delimiter := ';';
      //recorre todos los ficheros de la lista
      for fileInfo in FTPList do begin
        ParseInfo.DelimitedText := fileInfo;
        if ParseInfo.Values['type'] = 'file' then
          result := result + [ParseInfo.Strings[ParseInfo.Count - 1]];
      end;
    finally
      ParseInfo.free;
    end;
  end;

var
  StringList: TStringList;
  files: TArray<string>;
  rutaActual, rutaFTP: string;
  fileName: string;
begin
  rutaFTP := 'midirectorio';

  StringList := TStringList.Create;
  try
    FTP.Connect;
    // Obtiene la ruta actual
    rutaActual := FTP.RetrieveCurrentDir;
    // con el parametro false, obtiene una lista simple de los nombre de ficheros y directorios
    // con este tipo de lista no se puede saber lo que es un fichero o un directorio
    FTP.List(StringList, '', false);
    if (rutaActual <> rutaFTP) then
      if (StringList.IndexOf(rutaFTP) < 0) then
        raise Exception.Create('la ruta buscada no existe')
      else
        ftp.changeDir(rutaFTP);

    /// con el parametro true, La informacion sobre los ficheros y directorios
    /// esta detallada en formato pares de valores separados por comas,
    /// por lo que hay que hacer un procesado de dicha informacion
    FTP.List(StringList, '', true);
    files := ExtractFTPFiles(StringList);
    for fileName in files do begin
      /// ... aqui va el proceseo de descarga ...
      Memo1.Lines.Add(fileName);
    end;
  finally
    StringList.Free;
  end;

Última edición por Casimiro Notevi fecha: 23-02-2023 a las 14:13:59. Razón: Poner etiquetas [delphi] [/delphi] al código.
Responder Con Cita