Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

cliente ftp con el API WinInet

Estas en el tema de cliente ftp con el API WinInet en el foro de Visual Basic clásico en Foros del Web. Dicen que no hay nada peor que chapucear el código realizado por otras personas o intentar meterle mano a un código sin saber de qué ...
  #1 (permalink)  
Antiguo 30/06/2006, 06:14
Avatar de nosoynadie  
Fecha de Ingreso: noviembre-2005
Ubicación: dando vueltas por aquí
Mensajes: 206
Antigüedad: 18 años, 5 meses
Puntos: 1
cliente ftp con el API WinInet

Dicen que no hay nada peor que chapucear el código realizado por otras personas o intentar meterle mano a un código sin saber de qué está hablando. Pues eso es lo que me está pasando.

Intento hacer un cliente 'sencillo' de ftp que suba o baje ficheros en Visual Basic (lenguaje que no domino y que tengo más olvidado que el día de mi noveno cumpleaños) Mi primera opción fue usar 'Internet Transfer Control' y lo conseguí. Conseguí subir ficheros a un servidor FTP determinado pero:
- a costa de hacer demasiadas conexiones
- sin control (por mi parte, quizás debido al planteamiento o a mi incapacidad) de controlar, con exactitud, los retornos del servidor
- con intentos de subida de ficheros incompleta (no subía todos los que debía subir)

Ante este panorama me decidí a usar al API WinInet. Como cualquier inexperto, me bajé la aplicación de cliente FTP que tienen en Microsoft. La leí (más o menos por encima), pereció que la entendí y me decidí a modificarla. La lié

Cuando ejecuto la aplicación, se conecta al servidor, intenta cambiar al directorio de trabajo y me da el siguiente error:
Código:
12018       ERROR_INTERNET_INCORRECT_HANDLE_TYPE
The type of handle supplied is incorrect for this operation.
el código de conexión es el siguiente:
Código:
'declaración de constantes
Public Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Public Const INTERNET_OPEN_TYPE_DIRECT = 1
Public Const INTERNET_INVALID_PORT_NUMBER = 0
Public Const INTERNET_SERVICE_FTP = 1
Public Const INTERNET_FLAG_PASSIVE = &H8000000
nFlag = INTERNET_FLAG_PASSIVE
......
'apertura de la conexión
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
'establecimiento de la conexión
hConnection = InternetConnect(hOpen, sServer, INTERNET_INVALID_PORT_NUMBER, txtUser, txtPassword, INTERNET_SERVICE_FTP, nFlag, 0)
.....
La pregunta que os hago es sencilla: ¿que tipo de manejador debe ser el de la conexión para que me permita crear directorios? (porque a eso se refiere el error dado, ¿no?)

Los que sepáis os parecerá una tontería de problema pero para mi es la leche, necesito hacer la aplicación, y para ello, antender lo que estoy haciendo. Se agradecerán todas las ayudas
__________________
http://www.nosoynadie.net/
  #2 (permalink)  
Antiguo 30/06/2006, 08:29
 
Fecha de Ingreso: abril-2004
Mensajes: 192
Antigüedad: 20 años
Puntos: 0
Hola, hasta ahi tu codigo funciona bien porque lo probe, pero no indicas la parte para cambiar de directorio.

Podes bajarte el Api guide desde allapi.net

y mira un ejemplo muy simple, pero que te muestra las operaciones basicas de FTP usando las funciones api del wininet.dll: cambiar de path, eliminar un archivo, crear, conectarse, cerrar conexión, subir, bajar... etc...

salu2
__________________
Recursos visual basic
  #3 (permalink)  
Antiguo 03/07/2006, 02:25
Avatar de nosoynadie  
Fecha de Ingreso: noviembre-2005
Ubicación: dando vueltas por aquí
Mensajes: 206
Antigüedad: 18 años, 5 meses
Puntos: 1
Gracias Luciano, voy a mirar a ver y te cuento
__________________
http://www.nosoynadie.net/
  #4 (permalink)  
Antiguo 03/07/2006, 03:06
Avatar de nosoynadie  
Fecha de Ingreso: noviembre-2005
Ubicación: dando vueltas por aquí
Mensajes: 206
Antigüedad: 18 años, 5 meses
Puntos: 1
Hola, estoy haciendo pruebas y no lo veo claro (sorry, el visual basic no es lo mio).

La idea es subir carpetas, previa comprobación de que existan en el servidor. Cuando procedo a dicha comprobación, con la función exCarpetaFTP(), me da este error:
Código:
12018       ERROR_INTERNET_INCORRECT_HANDLE_TYPE
               The type of handle supplied is incorrect for this
               operation.
Código:
Function exCarpetaFTP(carpeta As String, hConnection As Long) As Boolean
    ' lista el contenido de un directorio
    Dim hFind As Long
    Dim nLastError As Long
    Dim dError As Long
    Dim ptr As Long
    Dim pData As WIN32_FIND_DATA
    
    'On Error Resume Next
    If Len(carpeta) > 0 Then rcd (carpeta)
        pData.cFileName = String(MAX_PATH, 0)
    
    hFind = FtpFindFirstFile(hConnection, "*.*", pData, 0, 0)
    nLastError = Err.LastDllError
    If hFind = 0 Then
        If (nLastError = ERROR_NO_MORE_FILES) Then
            MsgBox "This directory is empty!"
            exCarpetaFTP = False
        Else
            ErrorOut nLastError, "FtpFindFirstFile"
            exCarpetaFTP = False
        End If
        Exit Function
    End If
End Function
Soy medio inutil, no consigo hacer la maldita comprobación
__________________
http://www.nosoynadie.net/
  #5 (permalink)  
Antiguo 03/07/2006, 05:08
Avatar de nosoynadie  
Fecha de Ingreso: noviembre-2005
Ubicación: dando vueltas por aquí
Mensajes: 206
Antigüedad: 18 años, 5 meses
Puntos: 1
si es que no me fijo, no funcionaba porque le estaba mandando la variable de conexión que no era al cambiarlo parece que todo funciona. Soy el peor
__________________
http://www.nosoynadie.net/
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:22.