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 := ';';
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;
rutaActual := FTP.RetrieveCurrentDir;
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);
FTP.List(StringList, '', true);
files := ExtractFTPFiles(StringList);
for fileName in files do begin
Memo1.Lines.Add(fileName);
end;
finally
StringList.Free;
end;