Hola,
¿Como se hace? He estado consultado la documentación y no he sabido ver
un método tal como sigue:
oFtp:Open( cftpUrl, cUser, cPass )
Saludos y gracias por vuestra ayuda.
José Luís Capel
In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
tFtp - establecer conexión con servidor Ftp
tFtp - establecer conexión con servidor Ftp
José Luis,
aquí tienes un ejemplo. Está escrito al vuelo y podría tener algún error
de sintaxis:
//---
FUNCTION TestFTP()
WITH OBJECT TFtp():New()
:cUser := "User"
:cPassword := "Pass"
:Create()
If :Open()
If :Connect( "ftp.miserver.com" )
//Aquí lo que quieras hacer
Endif
:Close()
Endif
:Destroy()
END
RETURN Nil
//---
Saludos,
José Lalín
aquí tienes un ejemplo. Está escrito al vuelo y podría tener algún error
de sintaxis:
//---
FUNCTION TestFTP()
WITH OBJECT TFtp():New()
:cUser := "User"
:cPassword := "Pass"
:Create()
If :Open()
If :Connect( "ftp.miserver.com" )
//Aquí lo que quieras hacer
Endif
:Close()
Endif
:Destroy()
END
RETURN Nil
//---
Saludos,
José Lalín
tFtp - establecer conexión con servidor Ftp
José,
>
> aquí tienes un ejemplo. Está escrito al vuelo y podría tener algún error
> de sintaxis:
>
> //---
> FUNCTION TestFTP()
>
> WITH OBJECT TFtp():New()
> :cUser := "User"
> :cPassword := "Pass"
> :Create()
>
> If :Open()
> If :Connect( "ftp.miserver.com" )
> //Aquí lo que quieras hacer
> Endif
> :Close()
> Endif
>
> :Destroy()
> END
>
> RETURN Nil
> //---
Muuchas gracias!!!
Tengo las siguientes dudas...
a. Tienes previsto implementar el comando ABORT (o similar)? El caso es
que a veces tenemos que cortar la comunicación con el servidor de forma
inmediata (estando incluso en proceso de envío/recepción de ficheros).
Sino, haciendo un oFtp:command("ABOR") ¿sería suficiente?
b. El envento OnCommand no acabo de verlo claro. Según la documentación
se dispara después del envío de un comando (supongo que solo después
de ejecutar el oFtp:Command). Pero... ¿como se cual oFtp:command lo
disparó? Tambien dice la documentación que hay que mirar un método
readfile para ver la respuesta del servidor ftp. No veo ese método
documentado.
c. En mi caso, tengo que hacer transferencias en ambos sentidos con
tamaños variables (a veces incluso de 1MB o más). ¿Como podría tener
información del progreso de la transmisión?
d. ¿Es necesario el tener un formulario activo para utilizar la clase
tFtp? Es decir, ¿puedo utilizarlo sin crear ningún formulario? (tipo
'commandline')
Saludos,
José Luis Capel
>
> aquí tienes un ejemplo. Está escrito al vuelo y podría tener algún error
> de sintaxis:
>
> //---
> FUNCTION TestFTP()
>
> WITH OBJECT TFtp():New()
> :cUser := "User"
> :cPassword := "Pass"
> :Create()
>
> If :Open()
> If :Connect( "ftp.miserver.com" )
> //Aquí lo que quieras hacer
> Endif
> :Close()
> Endif
>
> :Destroy()
> END
>
> RETURN Nil
> //---
Muuchas gracias!!!
Tengo las siguientes dudas...
a. Tienes previsto implementar el comando ABORT (o similar)? El caso es
que a veces tenemos que cortar la comunicación con el servidor de forma
inmediata (estando incluso en proceso de envío/recepción de ficheros).
Sino, haciendo un oFtp:command("ABOR") ¿sería suficiente?
b. El envento OnCommand no acabo de verlo claro. Según la documentación
se dispara después del envío de un comando (supongo que solo después
de ejecutar el oFtp:Command). Pero... ¿como se cual oFtp:command lo
disparó? Tambien dice la documentación que hay que mirar un método
readfile para ver la respuesta del servidor ftp. No veo ese método
documentado.
c. En mi caso, tengo que hacer transferencias en ambos sentidos con
tamaños variables (a veces incluso de 1MB o más). ¿Como podría tener
información del progreso de la transmisión?
d. ¿Es necesario el tener un formulario activo para utilizar la clase
tFtp? Es decir, ¿puedo utilizarlo sin crear ningún formulario? (tipo
'commandline')
Saludos,
José Luis Capel
tFtp - establecer conexión con servidor Ftp
José,
Y una última cuestión:
¿habría alguna posibilidad de volcar a un fichero tipo log 'la
conversación ftp server/client ?
Saludos y gracias,
José Luis Capel
Y una última cuestión:
¿habría alguna posibilidad de volcar a un fichero tipo log 'la
conversación ftp server/client ?
Saludos y gracias,
José Luis Capel
tFtp - establecer conexión con servidor Ftp
José,
>
> b. El envento OnCommand no acabo de verlo claro. Según la documentación
> se dispara después del envío de un comando (supongo que solo después de
> ejecutar el oFtp:Command). Pero... ¿como se cual oFtp:command lo
> disparó? Tambien dice la documentación que hay que mirar un método
> readfile para ver la respuesta del servidor ftp. No veo ese método
> documentado.
>
He visto que tFtp desciende de tInternet. Ahí es donde está la
documentación que no veía.
Saludos,
José Luis Capel
>
> b. El envento OnCommand no acabo de verlo claro. Según la documentación
> se dispara después del envío de un comando (supongo que solo después de
> ejecutar el oFtp:Command). Pero... ¿como se cual oFtp:command lo
> disparó? Tambien dice la documentación que hay que mirar un método
> readfile para ver la respuesta del servidor ftp. No veo ese método
> documentado.
>
He visto que tFtp desciende de tInternet. Ahí es donde está la
documentación que no veía.
Saludos,
José Luis Capel
tFtp - establecer conexión con servidor Ftp
José Luis,
> a. Tienes previsto implementar el comando ABORT (o similar)? El caso es
> que a veces tenemos que cortar la comunicación con el servidor de forma
> inmediata (estando incluso en proceso de envío/recepción de ficheros).
> Sino, haciendo un oFtp:command("ABOR") ¿sería suficiente?
Sí, el método Command() sirve para enviar mandatos directamente al
servidor FTP. Lo implementé para no tener que tocar el código de la
clase para adaptarla a diferentes tipos de servidor FTP.
> b. El envento OnCommand no acabo de verlo claro. Según la documentación
> se dispara después del envío de un comando (supongo que solo después de
> ejecutar el oFtp:Command). Pero... ¿como se cual oFtp:command lo
> disparó? Tambien dice la documentación que hay que mirar un método
> readfile para ver la respuesta del servidor ftp. No veo ese método
> documentado.
El método Command() devuelve TRUE o FALSE para indicar si el servidor
FTP entendió el mandato, luego se lanza OnCommand si la operación tuvo
éxito.
> c. En mi caso, tengo que hacer transferencias en ambos sentidos con
> tamaños variables (a veces incluso de 1MB o más). ¿Como podría tener
> información del progreso de la transmisión?
Tendrás que usar un TProgressBar y actualizar en el bucle de
lectura/escritura. Para subir un archivo sería algo así:
//---
If oNet:Connect( cServer )
hFile := FOpen( "test.txt" )
If hFile > -1
hRemote := oNet:OpenFileWrite( "test.txt" )
If hRemote != 0
While lOk .AND. ( nRead := FRead( hFile, @cBuffer, nBuffer ) ) > 0
lOk := oNet:WriteFile( hRemote, @cBuffer, nRead )
//Aquí actualizar TProgressBar
End
Endif
oNet:CloseFile( hRemote )
FClose( hFile )
Endif
//---
NOTA: No hace falta que llames a ProcessMessages() dentro del bucle
While porque Xailer ya lo hace automáticamente.
> d. ¿Es necesario el tener un formulario activo para utilizar la clase
> tFtp? Es decir, ¿puedo utilizarlo sin crear ningún formulario? (tipo
> 'commandline')
Creo que sí. Al hacer los tests para probar las clases recuerdo que
lanzaba el EXE del test y escribía la información de debug a un archivo
sin interactuar con el test hasta que terminaba. ¿ Te refieres a eso o a
tener tu aplicación funcionando y una sesión FTP en segundo plano ?
Saludos,
José Lalín
> a. Tienes previsto implementar el comando ABORT (o similar)? El caso es
> que a veces tenemos que cortar la comunicación con el servidor de forma
> inmediata (estando incluso en proceso de envío/recepción de ficheros).
> Sino, haciendo un oFtp:command("ABOR") ¿sería suficiente?
Sí, el método Command() sirve para enviar mandatos directamente al
servidor FTP. Lo implementé para no tener que tocar el código de la
clase para adaptarla a diferentes tipos de servidor FTP.
> b. El envento OnCommand no acabo de verlo claro. Según la documentación
> se dispara después del envío de un comando (supongo que solo después de
> ejecutar el oFtp:Command). Pero... ¿como se cual oFtp:command lo
> disparó? Tambien dice la documentación que hay que mirar un método
> readfile para ver la respuesta del servidor ftp. No veo ese método
> documentado.
El método Command() devuelve TRUE o FALSE para indicar si el servidor
FTP entendió el mandato, luego se lanza OnCommand si la operación tuvo
éxito.
> c. En mi caso, tengo que hacer transferencias en ambos sentidos con
> tamaños variables (a veces incluso de 1MB o más). ¿Como podría tener
> información del progreso de la transmisión?
Tendrás que usar un TProgressBar y actualizar en el bucle de
lectura/escritura. Para subir un archivo sería algo así:
//---
If oNet:Connect( cServer )
hFile := FOpen( "test.txt" )
If hFile > -1
hRemote := oNet:OpenFileWrite( "test.txt" )
If hRemote != 0
While lOk .AND. ( nRead := FRead( hFile, @cBuffer, nBuffer ) ) > 0
lOk := oNet:WriteFile( hRemote, @cBuffer, nRead )
//Aquí actualizar TProgressBar
End
Endif
oNet:CloseFile( hRemote )
FClose( hFile )
Endif
//---
NOTA: No hace falta que llames a ProcessMessages() dentro del bucle
While porque Xailer ya lo hace automáticamente.
> d. ¿Es necesario el tener un formulario activo para utilizar la clase
> tFtp? Es decir, ¿puedo utilizarlo sin crear ningún formulario? (tipo
> 'commandline')
Creo que sí. Al hacer los tests para probar las clases recuerdo que
lanzaba el EXE del test y escribía la información de debug a un archivo
sin interactuar con el test hasta que terminaba. ¿ Te refieres a eso o a
tener tu aplicación funcionando y una sesión FTP en segundo plano ?
Saludos,
José Lalín
tFtp - establecer conexión con servidor Ftp
José Luis,
> ¿habría alguna posibilidad de volcar a un fichero tipo log 'la
> conversación ftp server/client ?
No tengo inconveniente en implementarlo aunque también se me ocurre que
puedes derivar una clase y personalizarla a tu gusto.
//---
CLASS TFTP FROM XFTP
PUBLIC:
METHOD Connect( cServer )
METHOD Log( cStr )
ENDCLASS
METHOD Connect( cServer ) CLASS TFTP
LOCAL lOk
::Log( "Connect: " + cServer )
IF ( lOK := Super:Connect( cServer ) )
::Log( " Conectado" )
ELSE
::Log( " Error:" + Str( ::nLastError ) + ::GetErrorDescription() )
ENDIF
RETURN lOk
METHOD Log( cStr ) CLASS TFTP
DEFAULT cStr TO ""
Memowrit( "Log.txt", MemoRead( "Log.txt" ) + cStr )
RETURN Nil
//---
Como te decía no tengo problema en implementarlo nativamente pero
prefiero que lo decidan Jose F. o Ignacio.
Saludos,
José Lalín
> ¿habría alguna posibilidad de volcar a un fichero tipo log 'la
> conversación ftp server/client ?
No tengo inconveniente en implementarlo aunque también se me ocurre que
puedes derivar una clase y personalizarla a tu gusto.
//---
CLASS TFTP FROM XFTP
PUBLIC:
METHOD Connect( cServer )
METHOD Log( cStr )
ENDCLASS
METHOD Connect( cServer ) CLASS TFTP
LOCAL lOk
::Log( "Connect: " + cServer )
IF ( lOK := Super:Connect( cServer ) )
::Log( " Conectado" )
ELSE
::Log( " Error:" + Str( ::nLastError ) + ::GetErrorDescription() )
ENDIF
RETURN lOk
METHOD Log( cStr ) CLASS TFTP
DEFAULT cStr TO ""
Memowrit( "Log.txt", MemoRead( "Log.txt" ) + cStr )
RETURN Nil
//---
Como te decía no tengo problema en implementarlo nativamente pero
prefiero que lo decidan Jose F. o Ignacio.
Saludos,
José Lalín