Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-01-2008
Gromeer Gromeer is offline
Registrado
 
Registrado: ene 2008
Posts: 4
Poder: 0
Gromeer Va por buen camino
Lightbulb Problemas y dudas enviando comandos al servidor FTP con Indy

Hola, antes de nada presentarme pues es mi primer mensaje en el foro.
Me llamo Miguel, soy de las Islas Baleares y recientemente he empezado a trastear con los componentes Indy.

Mi problema es el siguiente, tengo un servidor FTP al cual si yo hago un HELP me devuelve el listado de comandos, entre ellos PROMPT y MDELETE que son los que me estan dando problemas.

Pruebo ambos comandos desde la consola de MS-DOS y funcionan correctamente, pero a la hora de usarlos via SendCmd('PROMPT',250); o SendCmd('MDELETE '+vPath,250); que son las funciones para enviar comandos al servidor, siempre me devuelve un error 500 "Command not understood"

Lo que necesito es borrar un directorio sin que pida confirmacion y borrando todo el contenido del directorio en si. Ignoro si existe algun metodo en los Indy que me permita hacerlo directamente, he estado buscando pero no he visto nada. Supongo que alguien se habra encontrado con el mismo problema alguna vez.

Por cierto, la version de Indy que uso es la 9 para delphi 5

Gracias por adelantado, un saludo
Responder Con Cita
  #2  
Antiguo 30-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Para eliminar un directorio, usá el método RemoveDir.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 31-01-2008
Gromeer Gromeer is offline
Registrado
 
Registrado: ene 2008
Posts: 4
Poder: 0
Gromeer Va por buen camino
Hola! Gracias por contestar, pero el método RemoveDir no me sirve, dado que este método realiza esta llamada SendCmd('RMD ' + ADirName, 250); y el comando FTP RMD no borra directorios si no están vacios y yo necesito algo que borre tanto el directorio como todo lo que pudiera contener.

Por eso mi idea era utilizar el comando FTP MDELETE desactivando la confirmación con un PROMPT pero al enviar esos dos comandos el servidor me devuelve un error "command not understood".

Gracias de nuevo y un saludo.
Responder Con Cita
  #4  
Antiguo 31-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Me temo que mdelete es un comando que implementa el cliente de ftp, y no el servidor.

He llegado a esta conclusión después de hacer algunas pruebas y buscar por un rato.

Si te fijas en la definición del protocolo ftp, no hay referencia alguna al comando.

Además, viendo la salida que normalmente produce:
Código:
ftp> MDELETE c*
mdelete cat1? y
200 DELE command okay.
mdelete cat2? y
200 DELE command okay.
mdelete cat3?
200 DELE command okay.
mdelete cata4? n
ftp>
A mi me parece que el cliente está enviando tantos comandos DELE como sea necesario para borrar los archivos que cumplan con el criterio.

Algo similar debe ocurrir con el comando prompt.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 31-01-2008
Gromeer Gromeer is offline
Registrado
 
Registrado: ene 2008
Posts: 4
Poder: 0
Gromeer Va por buen camino
Hola de nuevo!

Tanto el PROMPT como el MDELETE son comandos del servidor, pero no son comandos RAW
Si envias un HELP al servidor te devuelve un listado con los comandos posibles y, en mi caso, tengo PROMPT y MDELETE, ambos comandos funcionan correctamente conectando desde una consola MS-DOS.
Es decir, me extraña que sean comandos del cliente cuando al consultar al servidor te los devuelve en la lista de comandos posibles.

De todos modos, sea como sea, no me resuelve mi problema!

Creo que tendre que crearme una funcion recursiva que recorra los posibles subdirectorios y archivos a borrar.


Un saludo.
Responder Con Cita
  #6  
Antiguo 31-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Francamente no se cual es tu sustento para decir que es un comando del servidor. El listado que has referenciado no dice nada acerca de dicho comando.

El hecho de que se muestre en el help, para mi, no es sino evidencia de que el comando help se interpreta también localmente.

Una muestra mas de ello es que, al tener windows en español, si introducis el comando help mdelete te mostrará la ayuda de dicho comando ¡en español!, independientemente del idioma en que responda el servidor. Esto, en mi caso también ocurre para todos los comandos.

Otra muestra de ello, es la diferencia que tenemos en el help del cliente de consola windows y el de consola de linux si nos conectamos al mismo servidor:

Windows:
Código:
C:\Documents and Settings\Mario Antonio>ftp castilloit.com
Conectado a castilloit.com.
220---------- Welcome to Pure-FTPd [TLS] ----------
220-You are user number 3 of 50 allowed.
220-Local time is now 08:56. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
Usuario (castilloit.com:(none)): xxx
331 User castillo OK. Password required
Contraseña:
230-User xxx has group access to:  xxx
230 OK. Current restricted directory is /
ftp> help
Los comandos se pueden abreviar.  Comandos:

!               delete          literal         prompt          send
?               debug           ls              put             status
append          dir             mdelete         pwd             trace
ascii           disconnect      mdir            quit            type
bell            get             mget            quote           user
binary          glob            mkdir           recv            verbose
bye             hash            mls             remotehelp
cd              help            mput            rename
close           lcd             open            rmdir
ftp>
Linux:

Código:
jcastillo@hyperlink-gateway:~$ ftp ftp.castilloit.com
Connected to ftp.castilloit.com.
220---------- Welcome to Pure-FTPd [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 08:48. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
Name (ftp.castilloit.com:jcastillo): xxx
331 User castillo OK. Password required
Password:
230-User xxx has group access to:  xxx
230 OK. Current restricted directory is /
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> help
Commands may be abbreviated.  Commands are:

!               debug           mdir            qc              send
$               dir             mget            sendport        site
account         disconnect      mkdir           put             size
append          exit            mls             pwd             status
ascii           form            mode            quit            struct
bell            get             modtime         quote           system
binary          glob            mput            recv            sunique
bye             hash            newer           reget           tenex
case            help            nmap            rstatus         tick
cd              idle            nlist           rhelp           trace
cdup            image           ntrans          rename          type
chmod           lcd             open            reset           user
close           ls              prompt          restart         umask
cr              macdef          passive         rmdir           verbose
delete          mdelete         proxy           runique         ?
ftp>
¿Ves la diferencia?

Finalmente, en esta otra página del mismo sitio, le clasifica como "client command", mientras que dice esto:

Cita:
Empezado por nsftools
If you need to use the "raw" FTP commands instead of these interpreted commands (for example, if you're writing your own FTP client), please consult this list instead.
Donde "this list" es el listado que ya vos nos habías dado.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #7  
Antiguo 31-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Por cierto... si yo envío un comando HELP a mi servidor ftp con el cliente de las INDY (asi estoy seguro que es el servidor el que responderá) obtengo un flamante timeout. No se si será medida de seguridad o que... lo cierto es que no me responde.

¿a vos si?
¿incluye el comando mdelete? La verdad, estoy convencido que no lo hará!

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #8  
Antiguo 01-02-2008
Gromeer Gromeer is offline
Registrado
 
Registrado: ene 2008
Posts: 4
Poder: 0
Gromeer Va por buen camino
Efectivamente se tratan de comandos del cliente, menudo lio que me había hecho. Ahora solo me falta averiguar una manera de borrar todo un directorio y su contenido sin recurrir a una función recursiva, valga la redundancia

Muchas gracias por tu aclaración, seguiré investigando.
Responder Con Cita
  #9  
Antiguo 02-02-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
mmm... A menos que estes seguro que el directorio, no tendrá subdirectorios, te verás obligado a usar recursividad, o a simularla con una pila, lo que resulta mas costoso en términos de tiempo de desarrollo. ¡No hay de otra!

¿Por qué tanto afán en evitar la recursividad?

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Indy Servidor Multihilos dekae Internet 0 03-09-2005 02:26:01
Nuevamente.... Servidor a Cliente INDY 10 m@kio Internet 1 18-08-2005 19:34:56
Mandar de Servidor a Cliente INDY TCP m@kio Internet 3 01-08-2005 17:14:35
Dudas - Aplicacion Cliente/Servidor con Firebird 1.5 Hagen Firebird e Interbase 1 27-02-2004 07:15:38
enviando email con nmsntp jorch_yr Internet 3 28-08-2003 22:35:40


La franja horaria es GMT +2. Ahora son las 01:09:04.


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
Copyright 1996-2007 Club Delphi