Copy file

273 views
Skip to first unread message

Juan Carlos Bustillo Lopez

unread,
Jun 20, 2020, 10:54:10 AM6/20/20
to Comunidad de Visual Foxpro en Español
Estimados colegas:

Para ejecutar una copia de archivos utilizo el COPY FILE ... TO ... de Un directorio D:\SISTEMA\*.* a  D:\RESPALDO\*.* y todo iva bien hasta que por razones de programa se creo un subdirectorio dentro de sistema, ahora copia los archivos y cuando llega al sub directorio me crea como un .bdf y me da un mensaje de que ya existe el archivo, o sea no crea el sub directorio como lo hace el DOS con \S al usar XCOPY.

Desde Comandos con instrucciones separadas creando con MD el directorio y el subdirectorio copia bien pero desde el programa no.

Por favor requiero su ayuda... gracias de antemano.

ggcagnola gmail

unread,
Jun 20, 2020, 10:59:54 AM6/20/20
to publice...@googlegroups.com

el copy file no crea directorios..

que sería "como un dbf"???

"ya existe" es porque... ya existe en el destino

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/534ffe5d-e999-4387-8166-a90ef0d68770o%40googlegroups.com.

Antonio Meza

unread,
Jun 20, 2020, 12:17:52 PM6/20/20
to Comunidad de Visual Foxpro en Español
Creo que el problema es cuando el directorio no existe, lo que debes hacer primero verificar si existe el directorio, si no existe crearlo y ya continuar con el proceso.

Busca sobre la función Directory(), porque no tengo a la mano VFP.

También puedes saber si existe un archivo con File()

saludos
Antonio Meza

Alejandro Isla

unread,
Jun 20, 2020, 12:26:55 PM6/20/20
to Comunidad de Visual Foxpro en Español
Hola, el backup tendrías que dejarlo en manos de un sistema para esa función que te permita métodos más óptimos del mismo.

Por otro lado respaldos en el mismo disco donde están las fuentes es medio suicidio.

Podes poner la instrucción exacta que usas o es COPY FILE "D:\SISTEMA\*.*" TO "D:\RESPALDO\*.*"

El hecho del "ya existe archivo " es lógica, porque a partir de la segunda vez que ejecutas, los archivos ya existen. se soluciona con un riesgoso SET SAFETY OFF que sobrescribe sin preguntar.

Otro problema es que si tienes el ejecutable en el directorio o tabla en uso, te da error de acceso, genera problemas en sistemas multi usuarios.

Efectivamente como indicas, no crea estructura de subdirectorios, tendrías que crear a mano la estructura en el d:\respaldo y luego ejecutar cada uno delo copy file para cada directorio

COPY FILE "D:\SISTEMA\*.*" TO "D:\RESPALDO\*.*"
COPY FILE "D:\SISTEMA\SUBDIR1\*.*" TO "D:\RESPALDO\SUBDIR1\*.*"
COPY FILE "D:\SISTEMA\SUBDIR2\*.*" TO "D:\RESPALDO\SUBDIR2\*.*"

Lo de crea un dbf no se entiende.


Saludos.

Zarlu

unread,
Jun 20, 2020, 1:59:55 PM6/20/20
to Comunidad de Visual Foxpro en Español
Buenas tardes Juan Carlos Bustillos Lopez!

Te recomiendo robocopy es la versión mejorada de xcopy
Desde VFP a través de linea de comando

Ejemplo: (NO es funcional. Sólo es ejemplo de sintaxis)
#DEFINE CRLF CHR(13)+CHR(10)
LOCAL loShell  AS WScript.Shell
loShell = CREATEOBJECT("WScript.Shell")
*nombre de temporal bat
lcFile = GetEnv("TEMP") + "" + Sys(2015) + ".bat"
lcOrigen=ALLTRIM(resp_dir.origen)
lcDestino=ALLTRIM(resp_dir.destino)
lcFinal=ALLTRIM(resp_dir.final)
IF DIRECTORY(lcDestino) .and. !DIRECTORY(lcFinal)
MKDIR (lcFinal)
ENDIF
lcCmd=[robocopy "]+ADDBS(lcOrigen)+ALLTRIM(dirdat.archivo)+[" "]+lcFinal2+[" ]+[/mir /r:2 /w:15 /log+:logacu.txt ]+CRLF+[echo %errorlevel% >rbcopyerr.txt]&&para archivos
*lcCmd=[robocopy "]+lcOrigen+[" "]+lcFinal+[" FILE "]+ALLTRIM(dirdat.archivo)+[" /mir /r:2 /w:15 /log+:logacu.txt ]+CRLF+[echo %errorlevel% >rbcopyerr.txt]&&para directorios           
*almacena cadena en bat
StrToFile(lcCmd, lcFile)
*ejecuta bat
loShell.Run(lcFile, 0, 3)
DELETE FILE (lcFile)
RELEASE loShell

Es un extracto de mi código. Quité algunas líneas intermedias. NO es funcional. Sólo es para ejemplificar el uso.
/log+:logacu.txt ]+CRLF+[echo %errorlevel% >rbcopyerr.txt] se incluye para obtener el txt del resultado y evaluar errores

Es sencillo. Hay suficiente información en la red. Tiene muchas opciones (crea directorios, elimina los de origen, elimina del destino si ya no existen en el origen, copia sólo de "x" fecha)
Con esto creé mi propia aplicación de respaldo

Algunos links:

Suerte
zarlu
Chetumal, Quintana Roo, México

Reply all
Reply to author
Forward
0 new messages