PDA

Ver la Versión Completa : Comprobar si existe un directorio en una conexión FTP


developerManu
24-10-2005, 11:03:41
Buenos días,

El programa que estoy haciendo se conecta a un ftp mediante un TidFTP.
Una vez establecida la conexión necesitaría saber i/o comprobar si existe un directorio, y sino es el caso crearlo.

La forma de crearlo ya la tengo se hace con:
IdFTP1.MakeDir(URL_DESTINO);

Para posteriormente subir ficheros con:
IdFTP1.Put(Ori, Dest);

Pero como digo anteriormente, como puedo comprobar si existe el directorio?

PD: He intentado buscarlo por el foro, pero no hay mucho temas de FTP, o por lo menos no lo he encontrado, ya que la palabra FTP no te la deja poner en el sistema de búsqueda por ser inferior a 4 carácteres.

Un saludo,
Felicitaciones por el foro, me es de gran ayuda.

dec
24-10-2005, 11:29:35
Hola,

No tengo experiencia usando el componente, pero, he podido ahora comprobar que puedes obtener una lista de los directorios y archivos en una variable de tipo "TStrings". Como no he visto ningún comando FTP que permita comprobar si un directorio existe (puede que simplemente no halla podido yo dar con el mismo, que conste) podrías, simplemente, obtener la lista de directorios y archivos, y luego comprobar si en esta lista se encuentra el directorio que pretendes crear, en caso de no existir. Podría ser una solución, ¿no te parece?



PD: He intentado buscarlo por el foro, pero no hay mucho temas de FTP, o por lo menos no lo he encontrado, ya que la palabra FTP no te la deja poner en el sistema de búsqueda por ser inferior a 4 carácteres.

Puedes tratar de realizar la búsqueda mediante estos términos, por ejemplo: "comandos FTP*", sin las comillas, pero con el asterisco luego del término que cuenta con menos de cuatro caracteres. De ese modo tal vez encuentres información al respecto.

En todo caso sé bienvenido al ClubDelphi (http://www.clubdelphi.com/). Por favor, revisa la guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php) de estos foros, pues, seguramente te será útil. ;)

developerManu
24-10-2005, 11:50:04
Merci, por la aclaración a la hora de buscar por el foro.

Sobre lo del FTP, mas o menos he pensado lo mismo que tu, al no ver el método que lo hiciera estaba intentando hacerlo como tu bien dices.

No obstante, si alguien sabe como hacerlo directamente, que no dude en exponerlo en el foro.

Un saludo,
Y muchas gracias por todo.

dec
24-10-2005, 12:50:56
Hola,

He estado mirando en algún que otro sitio y no consigo dar con un comando FTP que nos ayude en el asunto que nos ocupa. Lo que se me ocurre ahora lo siguiente: enviar un comando FTP con el fin de cambiarnos a un determinado directorio, el cual, de no existir, generará un mensaje de error. Es decir, hacer algo como lo siguiente, una vez conectados al servidor FTP:


idFtp.SendCmd('CWD directorio');

Luego de la anterior instrucción podríamos consultar la propiedad "LastCmdResult" del "TIdFTP", la cual nos ofrece desde el código de respuesta del servidor ("550" en caso de que no exista el directorio) hasta el texto del mismo, que sería: "[nombre del directorio]: No such file or directory". No sé si te servirá de algo. ;)

dec
24-10-2005, 13:27:47
Hola de nuevo,

Se me ocurre que, siguiendo lo dicho en mi anterior mensaje, podría ser más fácil "preguntar" si el comando "CWD" tuvo éxito que lo contrario. Esto es, creo que podría hacerse algo así para averiguar si un directorio existe:


if idFtp.SendCmd('CWD xeditor', -1) <> -1 then
begin
if (idFtp.LastCmdResult.TextCode = '250') then
ShowMessage('El directorio existe')
else
ShowMessage('El directorio no existe');
end;

Hay que tener en cuenta, en caso de que el directorio exista, que el comando "CDW" nos habrá movido al mismo, lo cual, si no interesara, podría "contrarestarse" del siguiente modo:


if idFtp.SendCmd('CWD xeditor', -1) <> -1 then
begin
if (idFtp.LastCmdResult.TextCode = '250') then
begin
idFtp.SendCmd('CWD ..');
ShowMessage('El directorio existe');
end
else
ShowMessage('El directorio no existe');
end;

De todos modos tendrás que hacer tus pruebas. Creo que no todos los servidores FTP admiten todos los comandos disponibles, dependerá de alguna que otra circunstancia (no estoy muy puesto en estos temas). Supongo que habrás realizado alguna que otra búsqueda en tu buscador favorito: en esta de Google (http://www.google.es/search?hl=es&q=FTP+commands&btnG=B%C3%BAsqueda&meta=) encuentras no pocas referencias sobre los comandos FTP disponibles.