descargar ftp

Iniciado por sp26, 6 Diciembre 2006, 18:41 PM

0 Miembros y 1 Visitante están viendo este tema.

sp26

Quisiera saber de una form que cree un Archivo txt (indicando los datos en el codigo mismo) y lo suba a un servidor FTP de manera silenciosa.   Tambien que descargue un archivo ftp

Me habian dicho que con Winsock, pero estuve redondeando y al final no encontre como  :-( Si hay otra manera de hacerlo seria mejor tambien ;).

jrhomer

Espero que esto te sirva. Cuentanos a ver como te ha ido al probarlo.



Private Declare Function GetShortPathName Lib "kernel32" Alias _
    "GetShortPathNameA" (ByVal lpszLongPath As String, _
    ByVal lpszShortPath As String, ByVal lBuffer As Long) As Long

Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
    (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
    ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''' FTP ''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Esta API es para que de una ruta WIndows, me devuelva una ruta MSDOS,
'ya que el comando FTP del prompt no reconoce rutas largas

Public Function RutaDos(strFileName As String) As String

    Dim lngRes As Long, strPath As String
    strPath = String$(165, 0)
    lngRes = GetShortPathName(strFileName, strPath, 164)
    RutaDos = Left$(strPath, lngRes)
   
End Function


''''''''''''''''''''''''''''''''''
''''''' subir fichero ''''''''''''
''''''''''''''''''''''''''''''''''


Function PutFichero()
On Error GoTo ERROR

    Dim Retval
    'escribimos el fichero ftp.txt que hara toda la labor
    If Len(Dir("C:\ftp.txt")) <> 0 Then Kill "C:\ftp.txt"
   
    Dim StrFtp As String
    Dim StrUsuario As String
    Dim StrPassword As String
    Dim strCarpetaRemota As String
    Dim StrRutalocalFichero As String
   
 
    StrFtp = "ftp.sitio.com"
    StrUsuario = "sitio.com"
    StrPassword = "contraseña"
    strCarpetaRemota = "html/BD/"
    StrRutalocalFichero =  "BD.zip"
   
    ' subir al servidor
    NumeroArchivo = FreeFile
    Open "C:\ftp.txt" For Append As #NumeroArchivo
    Print #NumeroArchivo, "Open " & StrFtp
    Print #NumeroArchivo, StrUsuario
    Print #NumeroArchivo, StrPassword
    Print #NumeroArchivo, "cd " & strCarpetaRemota
    Print #NumeroArchivo, "binary"
    Print #NumeroArchivo, "put " & RutaDos(StrRutalocalFichero)
    Print #NumeroArchivo, "bye"
    Close #NumeroArchivo
    DoEvents

'    Retval = Shell("ftp -s:C:\ftp.txt", vbNormalFocus)
    Call ExecuteAndWait("ftp -s:C:\ftp.txt")
   
    Exit Function

ERROR:
End Function



''''''''''''''''''''''''''''''''''
''''''' bajar fichero ''''''''''''
''''''''''''''''''''''''''''''''''


Function GetFichero()
On Error GoTo ERROR

    Dim Retval

    Dim StrFtp As String
    Dim StrUsuario As String
    Dim StrPassword As String
    Dim strCarpetaRemota As String
    Dim StrFicheroRemoto As String
   
    StrFtp = "ftp.sitio.com"
    StrUsuario = "sitio.com"
    StrPassword = "contraseña"
    strCarpetaRemota = "html/BD/"
    StrFicheroRemoto = "BD.ZIP"
   
    ' bajar el fichero
    NumeroArchivo = FreeFile
    Open "C:\ftp.txt" For Append As #NumeroArchivo
    Print #NumeroArchivo, "Open " & StrFtp
    Print #NumeroArchivo, StrUsuario
    Print #NumeroArchivo, StrPassword
    Print #NumeroArchivo, "cd " & strCarpetaRemota
    Print #NumeroArchivo, "binary"
    Print #NumeroArchivo, "get " & StrFicheroRemoto & " " & _
            RutaDos(Directorio) & "BD.zip"
    Print #NumeroArchivo, "bye"
    Close #NumeroArchivo
    DoEvents

'    Retval = Shell("ftp -s:C:\ftp.txt", vbNormalFocus)
    Call ExecuteAndWait("ftp -s:C:\ftp.txt")
   
    If Len(Dir("C:\ftp.txt")) <> 0 Then Kill "C:\ftp.txt"
   
    ' cambiar nombre, para tener una cópia de seguridad
    NumeroArchivo = FreeFile
    Open "C:\ftp.txt" For Append As #NumeroArchivo
    Print #NumeroArchivo, "Open " & StrFtp
    Print #NumeroArchivo, StrUsuario
    Print #NumeroArchivo, StrPassword
    Print #NumeroArchivo, "cd " & strCarpetaRemota
    Print #NumeroArchivo, "rename " & StrFicheroRemoto & " " & _
            "BD_" & FECHA & ".zip"
    Print #NumeroArchivo, "bye"
    Close #NumeroArchivo
    DoEvents

    Call ExecuteAndWait("ftp -s:C:\ftp.txt")
   
    Exit Function

ERROR:
End Function
ups!!

rixi15

y en el form_load k se pone¿?

Castord

WTF!

ese codigo no hace nada interesante...
Desde Asunción - Paraguay
/*Es una ***** pero igual amo mi país!*/

sp26

¿Porque no hace nada interesante? Tienes algun codigo mejor? si lo tienes, seria bueno que lo compartas con nosotros  ;)



Gracias Jrhomer, probare tu codigo ;).

aunque no entiendo en la parte que dices:.

StrRutalocalFichero =  "BD.zip"


Tambien no dejaste claro como crear un archivo *.txt, de igual manera muchas gracias, lo probare .

rixi15

ami no me funciona ay k ponmer algo en el form load¿?

sp26

haber, tampoco me funciona.

intentare cis=3

sp26


jrhomer

El código fuinciona perfectamente, lo tengo funcionando en aplicaciones y no hay problema.

Para descargar un archivo llama a:
GetFichero

Para subir una archivo al servidor FTP llama a:
PutFichero()

Las funciones son personales.... no son para que las copies y ya tenga que funcionar, mirar a ver que modificaciones teneis que .hacer, pero ese código funciona perfectamente.

Citaraunque no entiendo en la parte que dices:.

StrRutalocalFichero =  "BD.zip"
BD.zip es el archivo que subo y bajo del servidor FTP y se encuentra en la ruta que indico .... imagina que pone C:\archivo.zip. En MI caso el archivo BD.zip se encuentra en el mismo directorio donde ejecuto la aplicación, es por eso que no hay más ruta.

ups!!