FoxPro/Visual FoxPro - Copiar archivos de una carpeta a otra

 
Vista:

Copiar archivos de una carpeta a otra

Publicado por Bekyna (294 intervenciones) el 14/05/2009 22:22:20
Hola necesito su ayuda, debo copiar un archivo de una ubicación a otra, normalmente lo hago con la instrucción COPY FILE pero el detalle es que debo de conocer el nombre del archivo origen y del destino, y en mi caso especifico el archivo siempre va a cambiar de nombre y necesito que respete el nombre en el archivo destino, ósea que el archivo origen como el destino debe de llamarse igual, así que por el momento no se que instrucción debo utilizar para realizar lo que necesito, en realidad lo que necesito es copiar todos los archivos que están en la carpeta origen y ponerlos en la carpeta destino

Es así como lo hago si se previamente como se llaman mi archivo origen
rutaA=”\Datosmiarchivo_O.xls”
rutaB=”\Cuentasmiarchivo_D.xls”

COPY FILE &rutaA TO &rutaB

Gracias por su ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Copiar archivos de una carpeta a otra

Publicado por JorgeE (423 intervenciones) el 16/05/2009 20:22:17
Hola
mira, si no conoces el nombre de tu archivo pues va a hacer un poco dificil q lo haga el programa de forma automatica como dice tu codigo,
lo que tendrias que hacer es usar funciones como el GETFILE() para buscar el nombre y ruta del archivo de origen y el archivo destino algo similar a esto:

Archivo1=Getfile("c:") ---> al seleccionar el archivo a copiar el nombre y ruta lo dejara en la variabla archivo1
ubicArchivo2= GETDIR("c:") --> para indicarle donde copiara el archivo de origen
posiscion=RAT("",Archivo1) -->determina en que posicion inicia el nombre de archivo en la cadena archivo1
NombreArchivo=SUBSTR(archivo1,posicion+1,len(archivo1)) --> Toma unicamente el nombre del archivo
Archivo2=UbicArchivo2+Nombrearchivo --> ubicacion y nombre de archivo en una sola variable...

COPY FILE &archivo1 to &Archivo2

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 5
Ha disminuido su posición en 13 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

RE:Copiar archivos de una carpeta a otra

Publicado por Mina (23 intervenciones) el 04/03/2015 16:40:27
¡Buen día!

Su instrucción me funciona muy bien, solo tengo un detalle mi archivo de origen se llama A123, pero al momento de copiarlo a la carpeta destino lo manda como a123, ¿cómo puedo hacer para que me deje la letra "A" así en mayúscula como originalmente se tiene?

De antemano muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

RE:Copiar archivos de una carpeta a otra

Publicado por Fidel José (558 intervenciones) el 04/03/2015 22:28:43
Hola Mina
Puedes utilizar Scripting.FileSystemObject.
Te muestro un procedure de ejemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
PROCEDURE CopiarArchivo
LPARAMETERS tcFileSource , tcFolderTarget ,tlVerbose ,tlOverWrite
 
*!*	tcFileSource:	Path y Archivo a copiar
*!*	tcFolderTarget:	Carpeta de Destino
*!*	tlVerbose:		=.T., Muestra un mensaje de copia realizada
*!*	tlOverWrite:	=.T., No pregunta si el archivo ya existe
*!*   Se pueden omitir todos los parámetros.
 
TRY
	LOCAL loFso, loEx as Exception,;
		lcFileTarget,lExito,;
		lnMess
	lnMess=6
	loFso=NEWOBJECT("Scripting.FileSystemObject")
 
	IF EMPTY(tcFileSource) OR NOT loFso.FileExists(tcFileSource)
		tcFileSource=GETFILE()
		IF EMPTY(tcFileSource)
			lnMess=0
		ENDIF
	ENDIF
	IF NOT EMPTY(tcFileSource)
 
		IF EMPTY(tcFolderTarget) OR NOT loFso.FolderExists(ADDBS(tcFolderTarget))
			tcFolderTarget=GETDIR(FULLPATH(""),"Carpeta de Destino","Copiando Archivos",64)
		ENDIF
 
		IF NOT EMPTY(tcFolderTarget)
			lcFileTarget=FORCEPATH(tcFileSource , tcFolderTarget)
 
			IF !tlOverWrite
				IF loFso.FileExists(lcFileTarget)
					lnMess=MESSAGEBOX(lcFileTarget+" ya existe."+CHR(13);
						+"Desea Sobrecopiar?",4,PROGRAM())
				ENDIF
			ENDIF
 
			IF lnMess=6
				loFso.CopyFile(tcFileSource , ADDBS(tcFolderTarget))
				lExito = loFso.fileExists(lcFileTarget)
			ENDIF
		ELSE
			lnMess=0
		ENDIF
	ENDIF
CATCH TO loex
	loex.UserValue=PROGRAM()
 
	ShowError(loex)	&& rutina de errores
FINALLY
	loFso = null
	IF tlVerbose AND VARTYPE(loex)#"O" AND lnMess=6
		MESSAGEBOX("Copia "+IIF(lExito,"Exitosa","Fallida"),0,PROGRAM())
	ENDIF
 
ENDTRY
 
ENDPROC

* Procedure ShowError (ejemplo)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
PROCEDURE ShowError
LPARAMETERS toExcep , tlNotShow , tcCaption
 
tcCaption=EVL(tcCaption,"Mensaje del Sistema")
LOCAL lcMens
lcMens="Fecha "+TRANSFORM(DATETIME());
	+CHR(13)+"Mensaje: "+toExcep.message;
	+CHR(13)+"ErrorNo: "+TRANSFORM(toExcep.Errorno);
	+CHR(13)+"Llamada: "+toExcep.Uservalue
IF _vfp.StartMode=0
	lcMens=lcMens+CHR(13)+"linea "+TRANSFORM(toExcep.lineno)
ENDIF
 
STRTOFILE(lcMens+CHR(13)+CHR(13),"Error_sys.log",1)
lcMens="Se ha producido un error:"+chr(13)+lcMens
IF NOT tlNotShow
	MESSAGEBOX(lcMens,0,tcCaption)
ENDIF
 
ENDPROC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 5
Ha disminuido su posición en 13 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

RE:Copiar archivos de una carpeta a otra

Publicado por Mina (23 intervenciones) el 06/03/2015 21:41:11
Qué cree que sí me copia mi archivo pero me lo sigue copiando con letras minúsculas, ¿cómo podría solucionarlo para que me deje mi nombre de archivo en mayúsculas??

¡Nuevamente gracias!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

RE:Copiar archivos de una carpeta a otra

Publicado por Fidel José (558 intervenciones) el 06/03/2015 22:37:08
Bien, hagamos una modificación y probemos.
El código que agrego está después de
*** Consulta el verdadero nombre del archivo a copiar ***

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
PROCEDURE CopiarArchivo
LPARAMETERS tcFileSource , tcFolderTarget ,tlVerbose ,tlOverWrite
 
*!*	tcFileSource:	Path y Archivo a copiar
*!*	tcFolderTarget:	Carpeta de Destino
*!*	tlVerbose:		=.T., Muestra un mensaje de copia realizada
*!*	tlOverWrite:	=.T., No pregunta si el archivo ya existe
 
TRY
	LOCAL loFso as Object,loFile as Object, loEx as Exception,;
		lcFileTarget,lExito,lnMess
	lnMess=6
	loFso=NEWOBJECT("Scripting.FileSystemObject")
 
	IF EMPTY(tcFileSource) OR NOT loFso.FileExists(tcFileSource)
		tcFileSource=GETFILE()
		IF EMPTY(tcFileSource)
			lnMess=0
		ENDIF
	ENDIF
	IF NOT EMPTY(tcFileSource)
		*** Consulta el verdadero nombre del archivo a copiar ***
 
		loFile=loFso.GetFile(tcFilesource)
		tcFileSource=ADDBS(JUSTPATH(tcFileSource))+loFile.Name
 
		*********************************************************
 
		IF EMPTY(tcFolderTarget) OR NOT loFso.FolderExists(ADDBS(tcFolderTarget))
			tcFolderTarget=GETDIR(FULLPATH(""),"Carpeta de Destino","Copiando Archivos",64)
		ENDIF
 
		IF NOT EMPTY(tcFolderTarget)
			lcFileTarget=FORCEPATH(tcFileSource , tcFolderTarget)
 
			IF !tlOverWrite
				IF loFso.FileExists(lcFileTarget)
					lnMess=MESSAGEBOX(lcFileTarget+" ya existe."+CHR(13);
						+"Desea Sobrecopiar?",4,PROGRAM())
				ENDIF
			ENDIF
 
			IF lnMess=6
				loFso.CopyFile(tcFileSource , ADDBS(tcFolderTarget))
				lExito = loFso.fileExists(lcFileTarget)
			ENDIF
		ELSE
			lnMess=0
		ENDIF
	ENDIF
CATCH TO loex
	loex.UserValue=PROGRAM()
 
	*ShowError(loex)	&& rutina de errores
FINALLY
	loFile = null
	loFso = null
	IF tlVerbose AND VARTYPE(loex)#"O" AND lnMess=6
		MESSAGEBOX("Copia "+IIF(lExito,"Exitosa","Fallida"),0,PROGRAM())
	ENDIF
 
ENDTRY
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Copiar archivos de una carpeta a otra

Publicado por antonio (1 intervención) el 15/11/2021 17:26:25
pero solo copia un archivo no?, pensé que se podía copiar varios archivos a la vez.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 147
Bronce
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

RE:Copiar archivos de una carpeta a otra

Publicado por zarlu (97 intervenciones) el 15/11/2021 18:26:07
Buenos días antonio!

El código está implementado para un sólo archivo. Tendrías que adaptar/eliminar varias líneas...
Para varios archivos sería algo como esto:
Clear
tcFileSource=GETDIR()+"*.*"
tcFolderTarget=GETDIR()
loFSO=CreateObject('Scripting.FileSystemObject')
loFso.CopyFile(tcFileSource ,tcFolderTarget)
RETURN

A eso le adaptas la cuestión de confirmaciones por sobre escritura, etc...

Suerte
zarlu
Chetumal, Quintana Roo, México
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar