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.

OT: Ejemplo de uso espec

Foro de Xailer profesional en español
Responder
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

OT: Ejemplo de uso espec

Mensaje por jose.luis »

Hola,
¿Alguien tiene algún ejemplo de uso de la clase tFtp?
Saludos y gracias,
José Luis Capel
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

OT: Ejemplo de uso espec

Mensaje por jose.luis »

Hola,
¿Existe algún método o propiedad de tFtp que me permita grabar la
'conversación' del cliente ftp y el servidor?
Saludos y gracias,
José Luis Capel
"José Luis Capel - Aicom" <jose.luis@iaicom.com> escribió en el mensaje
news:[email=45e3f835@news.xailer.com...]45e3f835@news.xailer.com...[/email]
> Hola,
>
> ¿Alguien tiene algún ejemplo de uso de la clase tFtp?
>
> Saludos y gracias,
> José Luis Capel
>
>
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

OT: Ejemplo de uso espec

Mensaje por Bingen Ugaldebere »

Esto lo que yo he preparado para que mis programas actualicen via FTP,
como siempre tendrás que adaptarlo a tus necesidades y si no preguntas
que pa eso estamos.
Salu2.
FUNCTION CheckFtpUpdates()
LOCAL oNet := TFtp():New(), oZip
LOCAL hFile, hRemote
LOCAL nBuffer := 1024 * 4, cBuffer := Space( nBuffer )
LOCAL lOk := .F., nFile:=1, nLine:=1, dLimite:=Ctod(" - - ")
LOCAL nRead, lUpdated:=.F.
Local aFiles := Array( 1 ), aSizes:= Array( 1 ), aDates:= Array( 1
), aTimes:= Array( 1 )
Local aFilesFTP := Array( 0 ), aZipFiles := Array( 0 )
Local aDir := aDir( AppData:cExeName, aFiles , aSizes, aDates, aTimes)
Local dUpdateDate, cUpdateTime
LOCAL cServer := AppData:cFTPServer
Local cFTPPath := AppData:cFTPPath
oNet:cUser := AppData:cFTPUser
onet:cPassword := AppData:cFTPPsw
If !AppData:lFTPAuto
Return .F.
Endif
//Create BACKUP path If necessary
If !ExistDir( AppData:cDataBackup )
MakeDir( AppData:cDataBackup )
If !AppData:lUser
MsgInfo(If(AppData:cOriginalLng<>"ESP",;
"Created backup folder ","Se ha creado la carpeta
de backup ")+;
AppData:cDataBackup)
Endif
Endif
oNet:Create()
If oNet:Open()
If oNet:Connect( cServer )
If oNet:SetCurrentDirectory(cFTPPath)
//Compueba la versión existente en el FTP
hRemote := oNet:OpenFileRead( "Version.txt" )
If hRemote != 0
oNet:ReadFile( hRemote, @cBuffer, nBuffer )

dUpdateDate:=Ctod(Alltrim(Substr(MemoLine(cBuffer,,2),At("= ",MemoLine(cBuffer,,2))+1)))

cUpdateTime:=Alltrim(Substr(MemoLine(cBuffer,,3),At("=",MemoLine(cBuffer,,3))+1))
oNet:CloseFile( hRemote )
Else
MsgStop("Imposible acceder a las actualizaciones del
FTP. Version.txt no válido")
Return .F.
Endif
//Graba la fecha del último check al FTP
AppData:cFTPCheck:=Date()
//Comprueba si el cliente está autorizado y la vigencia del
contrato
hRemote := oNet:OpenFileRead( "Licences.txt" )
If hRemote != 0
oNet:ReadFile( hRemote, @cBuffer, nBuffer )
oNet:CloseFile( hRemote )
For nLine:=1 to MlCount(cBuffer)
If
At(Upper(AppData:cFTPLicence),Upper(Memoline(cBuffer,,nLine) )) >0
lOk:=.t.

dLimite:=Ctod(Alltrim(StrTran(Upper(Memoline(cBuffer,,nLine) ),Upper(AppData:cFTPLicence), "")))
Exit
Endif
Next
If !lOk
MsgStop(AppData:cFTPLicence+CRLF+CRLF+;
"Hay una nueva versión del programa del
"+Dtoc(dUpdateDate)+" a las "+cUpdateTime+CRLF+CRLF+;
"Pero el usuario "+AppData:cFTPLicence+" no
esta autorizado para hacer la actualización.")
Return .F.
Else
If Date()>dLimite
MsgStop("Hay una nueva versión del programa del
"+Dtoc(dUpdateDate)+" a las "+cUpdateTime+CRLF+CRLF+;
"Pero el usuario "+AppData:cFTPLicence+"
ha vencido su periodo de licencia "+Dtoc(dLimite))
Return .F.
Endif
Endif
Else
MsgStop("Imposible acceder a las actualizaciones del
FTP. Licences.txt no válido")
Return .F.
Endif
//Comprueba si la actualización del FTP es mas nueva que el
programa en curso
If Ctod(Left(AppData:cFTPLast,10)) < dUpdateDate .Or. ;
( Ctod(Left(AppData:cFTPLast,10)) = dUpdateDate .And.
SubStr(AppData:cFTPLast,12,8) < cUpdateTime )
If MsgYesNo(AppData:cFTPLicence+CRLF+CRLF+;
"Usuario autorizado. Fecha lí­mite de
licencia "+Dtoc(dLimite)+CRLF+CRLF+;
"Hay una nueva versión del programa del
"+Dtoc(dUpdateDate)+" a las "+cUpdateTime+CRLF+CRLF+;
"¿Desea descargar e instalar esta nueva
versión?")
//Muestra información de la actualización si existe
Info.Txt
hRemote := oNet:OpenFileRead( "Info.txt" )
If hRemote != 0
oNet:ReadFile( hRemote, @cBuffer, nBuffer )
MsgPostIt(cBuffer)
oNet:CloseFile( hRemote )
Endif
//Recuperar archivo ZIP con la última actualización
If(File("Patch.zip"),Ferase("Patch.zip"),)
WaitOn("Recuperando archivos de actualización desde
el servidor FTP",;
"Actualización del programa en curso....")
oNet:GetFile("Patch.zip","Patch.zip",.F.)
WaitOff()
If !File("Patch.zip")
MsgStop("Imposible actualizar el programa el
fichero Patch.zip no ha sido localizado")
Return .F.
Endif
//Obtener lista de archivos incluidos en la actualización
WITH OBJECT oZip := TUnZipFile()
:cFileName := "Patch.zip"
aFilesFTP := oZip:aFiles
END
//Hacer un ZIP con los archivos que van a ser sustituidos
WaitOn("Guardando copia de los archivos que van a ser
sustituidos")
For nFile:=1 to Len(aFilesFTP)
If File( Left(AppData:cExename,3)+aFilesFTP[nFile,1] )
Aadd( aZipFiles,
Left(AppData:cExename,3)+aFilesFTP[nFile,1] )
Endif
Next
WITH OBJECT oZip := TZipFile()
:aFileMask := aZipFiles
:cFileName := AppData:cDataBackup+"Update
"+Dtoc(Date())+".Zip"
:lIncludePath := .T.
:nCompressionLevel:= pkBEST
:Run()
END
//Grabar fecha y hora del último update en modo local
AppData:cFTPLast:=Dtoc(dUpdateDate)+" "+cUpdateTime
//Grabar Usuario fecha y hora del último update en el FTP
hRemote := oNet:OpenFileRead( "Version.txt" )
If hRemote != 0
oNet:ReadFile( hRemote, @cBuffer, nBuffer )
oNet:CloseFile( hRemote )
hRemote := oNet:OpenFileWrite(
cFTPPath+"Version.txt" )
If hRemote != 0
cBuffer:=cBuffer+CRLF+AppData:cFTPLicence+"
"+Dtoc(Date())+" "+Time()
oNet:WriteFile( hRemote, @cBuffer, Len(cBuffer) )
oNet:CloseFile( hRemote )
Endif
Endif
WaitOff()
lUpdated:=.T.
Endif
Endif
Endif
Endif
oNet:Close()
Endif
oNet:Destroy()
If lUpdated
Execute("Patch.Exe",,.F.)
Application:oMainForm:Close()
Endif
RETURN lUpdated
Responder