Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Indy con servidor FTP en linux (https://www.clubdelphi.com/foros/showthread.php?t=88287)

Mystery 14-05-2015 22:36:42

Indy con servidor FTP en linux
 
Hola a todos, desde hace algún tiempo no había entrado al sitio y bueno realmente he extrañado relacionarme en estos medios (me he ausentado por problemas de enfermedad, ya estoy OK).
En fin les informo de mi problema a ver si Uds. me brindan una ayuda pues no alcanzo a dar pie en este asunto…
No puedo listar los objetos de un ftp en Linux sin embargo con la misma función en un ftp en Windows todo bien… a que se deberá este problema me quedo sin una explicación creo que el asunto debe estar en los problemas de Windows y Linux y sistema de ficheros. Pero debe existir alguna forma. Bueno bien tal vez alguno de Uds. ha incursionado en este tema y le agradecería si pudiese iluminarme en este tema.
Bueno muchas gracias de antemano sin mas
Mystery

Casimiro Notevi 14-05-2015 23:09:58

Hola, nos alegramos de que estés ya bien de salud :)

En cuanto a tu duda, sería necesario que dieras alguna información para poder ayudarte.

ecfisa 15-05-2015 00:03:27

Lo mismo digo sobre tu salud :)

No se a que te refieres con objetos, pero hice una pequeña prueba con Delphi 7 e Indy 9 y lista archivos y carpetas sin problemas en un servidor Linux:
Código Delphi [-]
uses  IdFTPList;

procedure TForm1.btnListClick(Sender: TObject);
begin
  with TidFTP.Create(nil) do
  try
    Username := 'anonymous';
    Password := EmptyStr;
    Host     := 'ftp.freebsd.org';
    try
      Connect;
    except
      raise Exception.Create( 'Error conectando con ' + Host );
    end;
    ChangeDir( 'pub/FreeBSD/development' );
    List( ListBox1.Items );
  finally
    Free;
  end;
end;

Resultado:


Saludos :)

Casimiro Notevi 15-05-2015 00:48:11

He hecho un copy de tu código y lo he pegado en lazarus con linux.


Mystery 15-05-2015 15:19:50

Hola a todos...
 
Muchas gracias a todos....
Que sucede para la próxima doy todos los detalles a pesar de que crea que no son importantes esta vez me equivoque en eso.
Bueno resulta que estoy haciendo una pequeña app que inscribo tareas en mi aplicación y todos los documentos, ficheros y demás respetando la organización jerárquica de los directorios en la PC se copian idénticamente a un servidor FTP.
La parte de copiar esta resuelta con buena rapidez logro realizar esta tarea.
Ahora bien cuando el usuario elimine una de estas tareas de la aplicación, esta debe ser capaz de eliminar el directorio en el FTP asociado a ella, con todo el árbol de directorios dentro del directorio principal. En fin eliminar todo lo asociado a la tarea en el FTP.
Trate de hacerlo con:

Código Delphi [-]
  IdFTP.RemoveDir(IdFTP.DirectoryListing[idx].FileName);
pero esto me dice que si el directorio no esta vacío no puede realizarlo. Busque en este foro sin éxito alguna alternativa y no encontré, tal vez exista pero no lo encontré…entonces me dije una función recursiva que resuelva esto y ya... en este momento estaba trabajando con el FileZilla como servidor ftp en windows.
y salio esta función:
Código Delphi [-]
begin
  IdLeeFTP:=TidFTP.Create(nil);
  IdLeeFTP.Username := 'user';
  IdLeeFTP.Password := 'pass';
  IdLeeFTP.Host := '127.0.0.1';  
  try
    IdLeeFTP.Connect;
  except
  end;
  flist:=TStringList.Create;
  IdLeeFTP.ChangeDir(aURL); 
  IdLeeFTP.List(flist,'*.*',true); 
  for i:=0 to IdLeeFTP.DirectoryListing.count-1 do
    if not delFTP(i) then //esta funcion me borra lo que sea... directorio o archivo
      BorraR(aurl+'/'+IdLeeFTP.DirectoryListing[i].FileName, IdLeeFTP.DirectoryListing[i].FileName);
  IdLeeFTP.ChangeDirUp;
  IdLeeFTP.RemoveDir(dname);
  flist.free;
  IdLeeFTP.free;
end;
esto en windows me trabajo bien pero ahora cuando me pase a servidor de mi aplicación en Linux (ambiente real)
cuando el compilador llega a
Código Delphi [-]
IdLeeFTP.DirectoryListing[i].FileName
me devuelve 0... Busque en súper google y bueno ahí encontré que los indy vienen configurados por defectos para que esta función trabaje en servidores FTP windows que para todos los demás están implementados pero debe habilitarse en la unit principal en el uses... por difícil que parezca he abierto todas las unit de los indy (por cierto trabajo en delphi7) y no he encontrado a lo que se refieren. Ofuscado con esta solución me decidí a poner un breve o casi nada explicación de mi problema.
En el código de ecfisa que por cierto muy bueno pues con el ya solucione el problema. No utiliza la dichosa función y bueno todo resulta OK.
Muchas gracias una vez mas y bueno toda esta extensa explicación es la que debía haber dado al principio jejejee
sorry
sin mas
Mystery


La franja horaria es GMT +2. Ahora son las 16:56:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi