¿Es necesario informar el código fuente?
Al desarrollar con PB, a menudo es necesario utilizar la función ftp. La aplicación más típica es generar un archivo txt a partir de los datos en la ventana de datos y luego enviar el archivo de datos al servidor remoto a través de ftp. Debido a que pb en sí no proporciona ninguna función ftp, si desea llamar a ftp en pb, solo puede usar recursos distintos de pb. Los siguientes son varios métodos resumidos por el autor en pb development.
1. Usar comandos externos
Este método consiste en ejecutar el comando ftp que viene con Windows en el programa pb. El método específico es generar un archivo .bat en el programa, escribir el comando ftp que se ejecutará en el archivo y luego ejecutar el archivo por lotes. Suponga que la IP del servidor ftp es 202.114.67.2, el nombre de usuario es usuario y la contraseña es 12345. Ahora necesita cargar el archivo t00001.txt en c:\temp\ local al directorio \txtdata\ del servidor. El código pb es el siguiente:
Entero li_bat //Puntero de nombre de archivo
Li _ bat = FileOpen(ruta _ FTP ' get _ file . bat ',
lineMode ! , escribir! , reemplazar )
FileWrite(li_bat,' cd c:\temp\')
/p>
FileWrite(li_bat, 'usuario ')
FileWrite(li_bat, ' 12345 ')
FileWrite(li_bat, ' put t00001.txt
\txtdata\t00001.txt ') p>
FileWrite(li_bat, 'Bye')
FileWrite(li_bat, ' exit ')
Cerrar archivo ( li_bat)
Ejecutar (path_ftp 'get_file.'bat', ¡minimizar!)
Messagebox("Mensaje", "Informe de datos completado")
La ventaja de este método es que es simple y fácil de implementar. No es necesario llamar a funciones API ni agregar OLE. Una desventaja es que la ejecución de comandos externos abrirá una ventana de DOS, lo cual no es lo suficientemente armonioso. La otra es que es imposible juzgar si la transmisión de datos es exitosa y es difícil de controlar durante la programación;
2. Utilizar el control de transmisión de Internet.
El control de transmisión de red es un control muy común en la programación de redes. Soporta dos de los protocolos más utilizados en Internet, Http y Ftp. En windows98 viene con el sistema. Para obtener más información sobre este control, consulte los libros relacionados. Aquí solo usamos su función Ftp. Agregue un OLE con este control en PB, asígnele el nombre ole_1 y establezca las propiedades de este control de acuerdo con los siguientes datos (tenga en cuenta que no son las propiedades de ole_1). Utilice valores predeterminados para los atributos que no figuran en la tabla:
Descripción del valor del atributo
El protocolo 2 especifica el protocolo Ftp.
Host remoto 202.114.67.2
Nombre de usuario Usuario1
Contraseña 12345
El control de transmisión de Internet admite dos modos de transmisión de datos, a saber, el modo de transferencia de sincronización y modo de transferencia asincrónica. El modo de transmisión sincrónica bloquea el programa durante la transmisión de datos. Esta función se implementa llamando al método OpenUrl del control; el modo asincrónico no bloquea el programa y se implementa llamando al método Execute del control. Aunque el método de sincronización es fácil de controlar, solo puede descargar archivos y no cargar archivos, lo que limita su aplicación práctica. Para cargar y descargar datos, sólo puede utilizar el modo de transferencia asíncrona del control.
Para completar la función en el ejemplo anterior, agregue la siguiente instrucción al programa PB:
Ole_1.object.execute(","put c:
\temp\t 00001. txt\txt data\t 00001 .txt ")
De manera similar, si desea descargar el archivo del servidor al local, agregue la declaración inmediata al programa:
Ole_1 .object.execut("," get\txt data\t00001.txt c:\temp\t00001.txt")
La función de Internet Transfer Control es muy poderosa, lo suficiente como para ser un FTP completamente funcional. herramienta. Y viene con el sistema operativo, por lo que no es necesario registrar nuevos controles durante la programación. Pero según la experiencia del autor, este control también tiene dos deficiencias que no se pueden ignorar. En primer lugar, la carga y descarga de datos es asincrónica y está muy de moda ejecutar solo un comando ftp a la vez. Si ejecuta varios comandos ftp a la vez, aparecerá un error. Por ejemplo, si queremos ingresar primero al directorio \file del servidor y luego cargar datos, el programa debería ser así:
ole _ 1 . /p>
Ole_1.object.execute(" "," put
c:\temp\t00001.txt\txtdata\t00001.txt")
Porque la ejecución El método es Se ejecuta de forma asincrónica, por lo que comienza a ejecutar la segunda instrucción sin esperar a que se complete la primera, lo que puede causar errores porque el servidor no ha tenido tiempo de transferir el directorio actual a \file. En segundo lugar, el autor también descubrió un problema desconcertante: al cargar con este control, el nombre del archivo cargado en el servidor se cambiará a mayúsculas en el ejemplo anterior, después de cargar el t00001.txt local. al servidor, su nombre cambiará a T0001.txt, que naturalmente es el mismo en NT, pero puede causar errores en máquinas Unix
3.
Este control es un control Ftp proporcionado por Mabry Software Company. Los lectores pueden ir a www.mabry.com para descargar este control (mftpx.ocx). para usar este control para programación en transmisión ftp Complete la mayoría de las funciones de Ftp y podrá controlar fácilmente la ejecución del programa en la programación. Por ejemplo, para completar las funciones anteriores, primero registramos el control y luego agregamos un Ole. del control en el programa PB, llamado Ole_1; use el editor de una sola línea Sle_1 para mostrar información relevante; haga clic en el botón Cb_1 para realizar la operación Ftp. Configure otra variable de instancia booleana, llamada is_con, y configúrela en falso para indicar si la red. está conectado Establezca las propiedades del control de la siguiente manera:
Descripción del valor del atributo
Host 202.114.67.2
Nombre de inicio de sesión de usuario
Contraseña de inicio de sesión 12345
El tiempo de espera 10 se establece según la situación real.
Agregue el siguiente código al evento en el que se hizo clic de Cb_1:
Sle_1.text = "Connecting..."
setpointer (¡Reloj de arena!)
p>
ole_1.object.connect()
Si es _con, entonces
Sle_1.text = "Iniciar transmisión..."
ole_1.object.putfile
("c:\temp\t00001.txt", "/txtdata/t00001.txt")
Sle_1.text = "Transferir ¡completado!"
Terminará si...
setpointer (¡flecha!)
is_con = false
Agrega el correspondiente a cada evento de Ole_1 Código:
Eventos asociados:
Si f está conectado, entonces
Sle_1.text = "¡Conexión exitosa!"
is_con = true
Otros
Sle_1.text = "¡Error de conexión!"
is_con = false
Terminará si ...
Evento de excepción externa:
Sle_1.text = "Error externo, posiblemente falla de red"
acción = ¡ExcepciónIgnorar!
Evento de progreso:
Sle_1.text = "transmitido "
cadena(bytestransferidos) ) " bytes..."