COPY ( DOS )

344 views
Skip to first unread message

HDA HDA54

unread,
Nov 4, 2010, 8:20:27 AM11/4/10
to publice...@googlegroups.com
Estimados Foristas :
Me remito al foro para saber si alguno de ustedes a utilizado alguna forma distinta para copiar desde un exe hecho en fox, archivos a otra carpeta, sin tener que emplear el Run Copy ( Dos ). ( Pantalla Negra )
Gracias  y Saludos Cordiales.

Luis Maria Guayan

unread,
Nov 4, 2010, 8:19:04 AM11/4/10
to publice...@googlegroups.com
FoxPro tiene su propio comando COPY ¿por que buscar otro?

COPY FILE c:\Archivo1.txt TO
c:\Archivo2.txt

Mira la ayuda de FoxPro el comando COPY FILE

Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

elkin dario uribe torres

unread,
Nov 4, 2010, 11:29:29 AM11/4/10
to publice...@googlegroups.com
Buenos dias

Para copiar o mover archivos de una carpeta a otra utilizo los comandos siguientes extractados de la pagina de David Amador Tapias

DECLARE LONG MoveFile IN "kernel32" ;
  STRING lpExistingFileName,;
  STRING lpNewFileName
 
DECLARE INTEGER CopyFile IN kernel32;
    STRING  lpExistingFileName,;
    STRING  lpNewFileName,;
    INTEGER bFailIfExists



gnDbcnumber = ADIR(gaDatabase, "C:\CarpetaOrigen\"+"*.tif")  && Create array
FOR nCount = 1 TO gnDbcnumber  && Recorrer todos los registros
        STORE ALLTRIM(gaDatabase(nCount,1)) TO lcArchivo
   
        STORE INT(VAL(lcArchivo1)/1000000) TO lccreardir1
        STORE INT((VAL(lcArchivo1)/1000000)*1000) TO lccreardir2
        STORE "F:\CarpetaDestino" TO Lcdir  &&Verifica que si exista el directorio destino
   IF DIRECTORY(Lcdir)
      IF FILE((Lcdir)+"\"+(lcArchivo))  &Verifica que este archivo no exista en el directorio destino
         =MESSAGEBOX("El archivo no se puede mover")
      ELSE    
*        CopyFile("E:\Guias_pendientes\"+(lcArchivo), (Lcdir)+"\"+(lcArchivo), 0)
          lngRetVal = MoveFile("E:\Guias_pendientes\"+(lcArchivo), (Lcdir)+"\"+(lcArchivo))
      ENDIF
   ENDIF
ENDFOR
=MESSAGEBOX("Termino el proceso en el servidor")

Elkin Uribe

elkin dario uribe torres

unread,
Nov 4, 2010, 11:33:11 AM11/4/10
to publice...@googlegroups.com
Ups!!  Perdon la instruccion era la siguiente


DECLARE LONG MoveFile IN "kernel32" ;
  STRING lpExistingFileName,;
  STRING lpNewFileName
 
DECLARE INTEGER CopyFile IN kernel32;
    STRING  lpExistingFileName,;
    STRING  lpNewFileName,;
    INTEGER bFailIfExists



gnDbcnumber = ADIR(gaDatabase, "C:\CarpetaOrigen\"+"*.tif")  && Create array
FOR nCount = 1 TO gnDbcnumber  && Recorrer todos los registros
        STORE ALLTRIM(gaDatabase(nCount,1)) TO lcArchivo
        STORE "F:\CarpetaDestino" TO Lcdir  &&Verifica que si exista el directorio destino
   IF DIRECTORY(Lcdir)
      IF FILE((Lcdir)+"\"+(lcArchivo))  &Verifica archivo no exista en el directorio destino

         =MESSAGEBOX("El archivo no se puede mover")
      ELSE    
*        CopyFile("E:\Guias_pendientes\"+(lcArchivo), (Lcdir)+"\"+(lcArchivo), 0)
          lngRetVal = MoveFile("C:\CarpetaOrigen\"+(lcArchivo), (Lcdir)+"\"+(lcArchivo))

      ENDIF
   ENDIF
ENDFOR
=MESSAGEBOX("Termino el proceso en el servidor")

Carlos Miguel FARIAS

unread,
Nov 4, 2010, 8:29:51 PM11/4/10
to publice...@googlegroups.com
Yo he hecho y utilizado durante mucho tiempo copiar en foxpro con rutinas hechas con FOPEN, FGET, FPUTS y similares, con un rendimiento casi equivalente al del copy (xcopy) del DOS, y no he tenido problemas, ademas tenia la posibilidad de mostrar la barra de avance en pantalla (que se comia el 50% del tiempo de copia, ja ja)

ibania blanco

unread,
Nov 6, 2010, 2:03:41 PM11/6/10
to Comunidad de Visual Foxpro en Español
carlos miguelm farias estube viendo la ayuda y no da muchos ejemplos
para estudio podeis colocar un ejemplo de copia o mover

Carlos Miguel FARIAS

unread,
Nov 6, 2010, 9:17:05 PM11/6/10
to publice...@googlegroups.com
Antes de complicarte, por que no usas el COPY FILE que trae el mismo vfp.
Para mover, haces un COPY FILE y luego un DELETE FILE del archivo de origen

Para usar las funciones que mencionaba, es un algoritmo muy simple (depende de tu nivel de programacion)

Basicamente, consiste en abrir el archivo a copiar con FOPEN, este devuelve un manipulador (handler) del archivo que es parametro en las subsiguientes sentencias FREAD (en cada pasada, podes leer hasta 65000 bytes), este bloque de datos, luego lo escribis en un archivo que creas con FCREATE, que devuelve otro manipulador que usas con sentencias FWRITE.

O sea, debes escribir un simple bucle

liLeo = FOPEN( lcArchivoOrigen, 0 ) && abre en modo buffer, solo lectura, un poco mas veloz.
liEscribo = FCREATE( lcArchivoDestino, 0 )
FSEEK( liLeo, 0, 0) && aseguro estar al principio
DO WHILE NOT FEOF( liLeo )
   lcDatos = FREAD( liLeo, 65535 ) && lee un bloque de 65kb o hasta fin de archivo
   FWRITE( liEscribo, lcDatos )       && Escribe en el destino
   NOTE FFlush es opcional, es mas cuestion de gusto, al igual, si fuerza o no la salida al disco.
   FFLUSH( liEscribo, .F. )   && esl segundo parámetro en falso, puede ser mejor si el disco esta cargado )
ENDDO

Esto tenes que probarlo y ver que tan rapido te funciona, compara con copy file u otras opciones, lo que si, es que puedes intercarlar entre cualquiera de las lineas de codigo mensajes al usuario, analisis de datos entrados, tene en cuenta que lcDatos, es esencialmente una variable de caracteres, y por lo tanto puede ser medida (len), o cualquier cosa que quieras hacer con esa cadena

Saludos: Miguel

ibania blanco

unread,
Nov 8, 2010, 10:16:31 AM11/8/10
to Comunidad de Visual Foxpro en Español
bien explicado, es de probar, gracias, por colocar
Reply all
Reply to author
Forward
0 new messages