La Web del Programador: Comunidad de Programadores
 
    Pregunta:  4043 - ¿COMO UTILIZAR LAS FUNCIONES API PARA COPIAR ARCHIVOS?
Autor:  Carla Flores
Hola deseo hacer una copia de un archivo en un ambiente cliente/servidor, estoy utilizando la función API CopyFileA, la declaro pero la utilizo en el evento click de un botón, pero no hace nada este el código que estoy utlizando:

Public Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

CopyFile "c:\imagenes\dibujo1.bmp", "\\b001_santana\C:\otras_imagenes\dibujo1.bmp", True

Espero que puedan ayudarme, gracias de antemano

  Respuesta:  Daniel Morin
Esto ya lo he respondidocon anterioridad; amigono te compliques la vida con las APIS, existe una manera de copiar archivos sin usar las apis y sin usar la instruccion shell, acontinuacion te explico como hacerlo:

1.-Agrega la siguiente referencia a tu proyecto: Microsoft Scripting Runtime

2.- El codigo es el siguiente:
Dim RutaOrigen
Dim RutaDestino
RutaOrigen="C:MiCarpetaArchivo.doc"
RutaDestino="\CarpetaRemota"
Dim File_Fso as FileSystemObject
Set File_Fso = New FileSystemObject
File_Fso.CopyFile RutaOrigen, RutaDestino

-----Recuerda que debes comprobar que tienes conexion con el punto remoto de lo contrario el codigo no funciona, puedes enviar un ping (señal de conección)al equipo remoto antes de copiar el archivo y si el valor de respuesta es 0 quiere decir que el equipo remoto esta listo para recibir, si el valor de respuesta es 1011entonces no esta conectado y no se puede copiar ningun archivo.

Si requieres un ejemplo completo mandame un email y con gusto te lo envio.

  Respuesta:  BETY GS
Hola, no se si ya lo hayas resuelto, pero en la ruta destino estas mal.
Me imagino que b001_santana es la computadora a donde te tienes que conectar... al conectarte a esta computadora como ya te lo dijeron solo veras las carpetas que tengas compartidas. El archivo que quieres copiar solo podrás hacerlo a alguna de esas carpetas y no hay necesidad de indicar la ruta de esas carpetas.
Por ejemplo:

En tu compu dale en RUN \b001_santana las carpetas que veas son a las que tienes acceso suponiendo que ves una carpeta que se llama DIBUJOS en tu codigo solo pondrás "\b001_santanaDIBUJOSdibujo1.bmp" aunque en la computadora b001_santana la carpeta imagenes esté en C:MIS IMAGENESDIBUJOS

  Respuesta:  Carla Flores
Public Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
Dim T as Long

T = CopyFile(origen, destino, True)
True, es para sobrescribir el archivo si ya este existe
Así es como se utiliza la función API para copiar archivos. Funciona bien en red, con el archivo a copiar abierto o cerrado, esta es su ventaja no tiene muchas restricciones.

  Respuesta:  Jose Ignacio Gonzalez Lorente
Estas intentando copiar un fichero desde una maquina local a otra maquina.

Primero verifica que te puedes conectar a esa maquina desde Ms_dos:
c:\net use Z: \\ "\\b001_santana\C:\otras_imagenes

Si no te conectas el codigo no se podra ejecutar.
Me parece que no lo haces bien. En la maquina remota tiene que existir un recurso compartido donde te puedas conectar, es decir, definir el directorio otras_imagenes como recurso compartido con un nombre x. Luego intenta hacer lo mismo:

c:\net use Z: \\ "\\b001_santana\x

si te conectas, haz lo mismo en el codigo.