Te paso mi rutina completa de como sacar copias de seguridad comprimiendo la informaci贸n con zip, la construi con la informaci贸n que se encuentran aca en foro.
La confirugaci贸n del nombre es porque me gusta que el usuario tenga control de sus copias, por ejemplo las tres primeros caracteres corresponde al codigo del usuario de la empresa, los tres siguientes caracteres (en azul) corresponde al mudulo que estan utilizando, en este casa inventarios, lo dos siguientes caracteres (en rojo) corresponde al a帽o completo del que estan sacando la informaci贸n.
El usuario puede restaurar la informaci贸n a su disco duro nuevamente, el sistema por seguridad saca una copia comprimida internamente para evitar da帽os por error al restaurar la informaci贸n, el va generando un consecutivo por cada restuauraci贸n que haga el usuario, el nombre del archivo que genera es asi:
Estas copias se realizan super rapido.
******************************
* SISTEMA 聽CONTABLE HYM PLUS *
* 聽 聽 聽DIWCOPIA.PRG 聽 聽 聽 聽 聽*
* 聽 COPIAS DE SEGURIDAD 聽 聽 聽*
* Actualizaci贸n: Feb.20.2008 *
******************************
#include "FiveWin.ch"
AUTO() 聽 聽 聽 聽 聽 聽 //Funci贸n que verifica si tiene permisos el usuario para entrar al modulo
IF Pub:ENTRA="A" 聽
聽 ZIPDATOS() 聽 聽 聽 聽
聽ELSE
聽 MSGINFO(Pub:MENTRA)
聽 CLOS DATA
ENDI
******************************************************
** Proceso saca copias de seguridad de Datos Contables
******************************************************
FUNCTION ZipDatos()
**SON 81 ARCHIVOS REVISADOS para sacar el Backup
aFiles:={}
ARCHIVO() 聽//Relleno la Matriz
nLen := Len(afiles) 聽 //Tama帽o de la matriz con
nActual:=0
Archivo:="H"+Pub:CODEMP+"INV"+Pub:ANO+".ZIP" 聽//Nombre del archivo en donde se realiza el Backup
cArchivo:=cGetFile((Archivo),"Seleccione un lugar para grabar el Backup",,'.\\',.t.)
IF Empty(AllTrim(cArchivo))
聽 RETURN NIL
ENDIF
IF FILE(cArchivo) 聽
聽 FErase(cArchivo) 聽//Borro el archivo comprimido si existe...
ENDIF
DEFINE DIALOG oDlg FROM 1, 1 TO 10, 44 TITLE "Espere ejecutando La copia de seguridad..."
@ 2, 2 METER oMeter VAR nActual TOTAL 100 OF oDlg SIZE 135, 12
ACTIVATE DIALOG oDlg CENTERED;
聽on Paint(If(Hb_ZIPFILE(cArchivo,aFiles, 5 , {|cFile,nPos|nActual:=nPos/nLen*100,oMeter:Set(nActual)} ),;
聽MsgInfo(("Copia realizada con EXITO "+CRLF+" "+CRLF+"A脩O "+ANONOM+CRLF+" "+CRLF+;
聽 聽 聽 聽 聽"Ubicaci贸n: "+cArchivo+CRLF+" "+CRLF+"Total archivos 81")),;
聽MsgInfo("La copia no se puede realizar")),oDlg:End())
Return Nil
***********************************************************************************
*Restaurar la copia al disco duro de Datos Contables Y GENERA UNA COPIA DE RESPALDO
***********************************************************************************
FUNCTION unZipDatos()
aFiles:={}
ARCHIVO()
RutaDatos:=Pub:DIRARCEMP+Pub:CODEMP
RutaRespal:=RutaDatos+"\RESPALDO" 聽 聽 聽//Para sacar copia de Respaldo en caso de restaurar
ArchRespal:=RutaRespal+"\ARCH0001.ZIP" //Lleva un consecutivo cada vez que restuara informaci贸n
nLen := len(aFiles)
nActual:=0
Archivo:="H"+Pub:CODEMP+"INV"+Pub:ANO+".ZIP" 聽//Nombre del archivo en donde se realiza el Backup
cArchivo:=cGetFile((Archivo),"Seleccione el lugar donde esta la COPIA",,'.\\',.t.)
aExtract := hb_GetFilesInZip(cArchivo)
IF SUBS(RutaDatos,1,2)#"\\"
聽 IF MSGNOYES( " 聽 聽 聽 聽 聽 聽 聽 聽! A T E N CI O N 隆"+CRLF+" "+CRLF+"Seguro que desea Restaurar los Datos,"+CRLF+;
聽 聽 聽 聽 聽 聽 聽"se sobreescribiran los existentes en su"+CRLF+;
聽 聽 聽 聽 聽 聽 聽 "Disco Duro C:\ 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 "+CRLF+" "+CRLF+"Seleccione" )
聽 聽 IF Len(aFiles) > 0
聽 聽 聽 IF !lIsDir(RutaRespal)
聽 聽 聽 聽 lMkDir(RutaRespal)
聽 聽 聽 ENDIF
聽 聽 聽 IF !FILE(ArchRespal)
聽 聽 聽 聽 HB_ZIPFILE(ArchRespal,aFiles)
聽 聽 聽 聽ELSE
聽 聽 聽 聽 CONTRO:=Val(SUBS(ArchRespal,30,4))
聽 聽 聽 聽 DO WHILE .T.
聽 聽 聽 聽 聽 CONTRO++
聽 聽 聽 聽 聽 CONT:=SUBS(STRZERO(CONTRO),7,4) 聽
聽 聽 聽 聽 聽 ArchNuevo:=SUBS(ArchRespal,1,29)+CONT+".ZIP"
聽 聽 聽 聽 聽 IF !FILE(ArchNuevo)
聽 聽 聽 聽 聽 聽 HB_ZIPFILE(ArchNuevo,aFiles)
聽 聽 聽 聽 聽 聽 EXIT
聽 聽 聽 聽 聽 ENDIF
聽 聽 聽 聽 ENDD
聽 聽 聽 ENDIF
聽 聽 聽 SILOHAGO()
聽 聽 聽ELSE
聽 聽 聽 聽MsgAlert("Archivo de respaldo corrupto!")
聽 聽 ENDIF
聽 聽ELSE
聽 聽 MsgAlert("Error, no se realizo la Restauraci贸n")
聽 ENDIF
聽ELSE
聽 MSGINFO(" 聽 聽 聽 聽 聽 聽 聽 聽! A TE N C I O N 隆"+CRLF+" "+CRLF+;
聽 聽 聽 聽 聽 "Las copias de seguridad solamente se pueden"+CRLF+;
聽 聽 聽 聽 聽 "restaurar desde el SERVIDOR. 聽 聽 聽 聽 聽 聽 聽 ")
ENDIF
****************
FUNC SILOHAGO()
DEFINE DIALOG oDlg FROM 1, 1 TO 10, 44 TITLE 'RECUPERANDO INFORMACION ...'
@ 2, 2 METER oMeter VAR nActual TOTAL 100 OF oDlg SIZE 135, 12
ACTIVATE DIALOG oDlg CENTERED;
聽 on Paint( If( HB_UnZipFile(cArchivo,{|cFile,nPos|nActual:=nPos/nLen*100,oMeter:Set(nActual)} ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽,.T.,,RutaDatos,aExtract,nil) ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 MsgInfo('Carpeta de Origen: '+carchivo+CRLF+;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 'Carpeta de Destino: '+RutaDatos+CRLF+;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 'Archivos Recuperados de: '+Archivo+CRLF+;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 'Cantidad de Archivos Recuperados: 81','Informaci贸n General del Proceso'),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 MsgInfo('La restauraci贸n no se puede realizar')),;
聽 聽 聽 聽 聽 聽 oDlg:End())
RETURN NIL
******************************************************************************************************
***Generar la Matriz de todos los archivos para sacar la copia y los respaldos en caso de Restauraci贸n
******************************************************************************************************
FUNC ARCHIVO
F01_HFENX:=Pub:DIRARCEMP+Pub:CODEMP+"\H3"+Pub:CODEMP+Pub:ANO+".DBF"
F02_HFCEP:=Pub:DIRARCEMP+Pub:CODEMP+"\H4"+Pub:CODEMP+Pub:ANO+".DBF"
F03_HFENV:=Pub:DIRARCEMP+Pub:CODEMP+"\H5"+Pub:CODEMP+Pub:ANO+".DBF"
F04_HFVEN:=Pub:DIRARCEMP+Pub:CODEMP+"\H8"+Pub:CODEMP+Pub:ANO+".DBF"
F05_HFCLE:=Pub:DIRARCEMP+Pub:CODEMP+"\HB"+Pub:CODEMP+Pub:ANO+".DBF"
F06_HFCLI:=Pub:DIRARCEMP+Pub:CODEMP+"\HC"+Pub:CODEMP+Pub:ANO+".DBF"
F07_HCIE:=Pub:DIRARCEMP+Pub:CODEMP+"\HE"+Pub:CODEMP+Pub:ANO+".DBF"
F08_HFAC:=Pub:DIRARCEMP+Pub:CODEMP+"\HF"+Pub:CODEMP+Pub:ANO+".DBF"
F09_HPAG:=Pub:DIRARCEMP+Pub:CODEMP+"\HG"+Pub:CODEMP+Pub:ANO+".DBF"
F10_HFENS:=Pub:DIRARCEMP+Pub:CODEMP+"\HH"+Pub:CODEMP+Pub:ANO+".DBF"
F11_HINV:=Pub:DIRARCEMP+Pub:CODEMP+"\HI"+Pub:CODEMP+Pub:ANO+".DBF"
F12_HRAA:=Pub:DIRARCEMP+Pub:CODEMP+"\HJ"+Pub:CODEMP+Pub:ANO+".DBF"
F13_HRBB:=Pub:DIRARCEMP+Pub:CODEMP+"\HK"+Pub:CODEMP+Pub:ANO+".DBF"
F14_HRCC:=Pub:DIRARCEMP+Pub:CODEMP+"\HL"+Pub:CODEMP+Pub:ANO+".DBF"
F15_HMED:=Pub:DIRARCEMP+Pub:CODEMP+"\HM"+Pub:CODEMP+Pub:ANO+".DBF"
F16_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"01.DBF"
F17_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"02.DBF"
F18_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"03.DBF"
F19_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"04.DBF"
F20_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"05.DBF"
F21_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"06.DBF"
F22_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"07.DBF"
F23_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"08.DBF"
F24_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"09.DBF"
F25_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"10.DBF"
F26_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"11.DBF"
F27_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"12.DBF"
F28_HPRO:=Pub:DIRARCEMP+Pub:CODEMP+"\HP"+Pub:CODEMP+Pub:ANO+".DBF"
F29_HFCYZ:=Pub:DIRARCEMP+Pub:CODEMP+"\HQ"+Pub:CODEMP+Pub:ANO+".DBF"
F30_HREM:=Pub:DIRARCEMP+Pub:CODEMP+"\HR"+Pub:CODEMP+Pub:ANO+".DBF"
F31_HFENE:=Pub:DIRARCEMP+Pub:CODEMP+"\HS"+Pub:CODEMP+Pub:ANO+".DBF"
F32_HTRM:=Pub:DIRARCEMP+Pub:CODEMP+"\HT"+Pub:CODEMP+Pub:ANO+".DBF"
F33_HFENR:=Pub:DIRARCEMP+Pub:CODEMP+"\HU"+Pub:CODEMP+Pub:ANO+".DBF"
F34_HGRU:=Pub:DIRARCEMP+Pub:CODEMP+"\HV"+Pub:CODEMP+Pub:ANO+".DBF"
F35_HFBOD:=Pub:DIRARCEMP+Pub:CODEMP+"\HW"+Pub:CODEMP+Pub:ANO+".DBF"
F36_HCOM:=Pub:DIRARCEMP+Pub:CODEMP+"\HX"+Pub:CODEMP+Pub:ANO+".DBF"
F37_HFCON:=Pub:DIRARCEMP+Pub:CODEMP+"\HZ"+Pub:CODEMP+Pub:ANO+".DBF"
F38_HRDD:=Pub:DIRARCEMP+Pub:CODEMP+"\HDD"+Pub:CODEMP+Pub:ANO+".DBF"
F39_HFENP:=Pub:DIRARCEMP+Pub:CODEMP+"\HWW"+Pub:CODEMP+Pub:ANO+".DBF"
F40_HFMCL:=Pub:DIRARCEMP+Pub:CODEMP+"\HXX"+Pub:CODEMP+Pub:ANO+".DBF"
F41_HTEM:=Pub:DIRLOCAL+Pub:CODEMP+"\HTEMP0.DBF"
F42_HFTEP:=Pub:DIRLOCAL+Pub:CODEMP+"\HTEMP2.DBF"
F43_HCOF:=Pub:DIRARCEMP+Pub:CODEMP+"\HCONFIG.DBF"
F44_HFCOI:=Pub:DIRARCEMP+Pub:CODEMP+"\HCOINTE.DBF"
F45_HFENX:=Pub:DIRARCEMP+Pub:CODEMP+"\H3"+Pub:CODEMP+Pub:ANO+".CDX"
F46_HFCEP:=Pub:DIRARCEMP+Pub:CODEMP+"\H4"+Pub:CODEMP+Pub:ANO+".CDX"
F47_HFENV:=Pub:DIRARCEMP+Pub:CODEMP+"\H5"+Pub:CODEMP+Pub:ANO+".CDX"
F48_HFVEN:=Pub:DIRARCEMP+Pub:CODEMP+"\H8"+Pub:CODEMP+Pub:ANO+".CDX"
F49_HFCLI:=Pub:DIRARCEMP+Pub:CODEMP+"\HC"+Pub:CODEMP+Pub:ANO+".CDX"
F50_HFAC:=Pub:DIRARCEMP+Pub:CODEMP+"\HF"+Pub:CODEMP+Pub:ANO+".CDX"
F51_HFENS:=Pub:DIRARCEMP+Pub:CODEMP+"\HH"+Pub:CODEMP+Pub:ANO+".CDX"
F52_HINV:=Pub:DIRARCEMP+Pub:CODEMP+"\HI"+Pub:CODEMP+Pub:ANO+".CDX"
F53_HRAA:=Pub:DIRARCEMP+Pub:CODEMP+"\HJ"+Pub:CODEMP+Pub:ANO+".CDX"
F54_HRBB:=Pub:DIRARCEMP+Pub:CODEMP+"\HK"+Pub:CODEMP+Pub:ANO+".CDX"
F55_HRCC:=Pub:DIRARCEMP+Pub:CODEMP+"\HL"+Pub:CODEMP+Pub:ANO+".CDX"
F56_HMED:=Pub:DIRARCEMP+Pub:CODEMP+"\HM"+Pub:CODEMP+Pub:ANO+".CDX"
F57_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"01.CDX"
F58_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"02.CDX"
F59_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"03.CDX"
F60_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"04.CDX"
F61_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"05.CDX"
F62_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"06.CDX"
F63_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"07.CDX"
F64_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"08.CDX"
F65_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"09.CDX"
F66_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"10.CDX"
F67_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"11.CDX"
F68_HMOV:=Pub:DIRARCEMP+Pub:CODEMP+"\HO"+Pub:CODEMP+Pub:ANO+"12.CDX"
F69_HPRO:=Pub:DIRARCEMP+Pub:CODEMP+"\HP"+Pub:CODEMP+Pub:ANO+".CDX"
F70_HFCYZ:=Pub:DIRARCEMP+Pub:CODEMP+"\HQ"+Pub:CODEMP+Pub:ANO+".CDX"
F71_HREM:=Pub:DIRARCEMP+Pub:CODEMP+"\HR"+Pub:CODEMP+Pub:ANO+".CDX"
F72_HFENE:=Pub:DIRARCEMP+Pub:CODEMP+"\HS"+Pub:CODEMP+Pub:ANO+".CDX"
F73_HTRM:=Pub:DIRARCEMP+Pub:CODEMP+"\HT"+Pub:CODEMP+Pub:ANO+".CDX"
F74_HFENR:=Pub:DIRARCEMP+Pub:CODEMP+"\HU"+Pub:CODEMP+Pub:ANO+".CDX"
F75_HGRU:=Pub:DIRARCEMP+Pub:CODEMP+"\HV"+Pub:CODEMP+Pub:ANO+".CDX"
F76_HFBOD:=Pub:DIRARCEMP+Pub:CODEMP+"\HW"+Pub:CODEMP+Pub:ANO+".CDX"
F77_HCOM:=Pub:DIRARCEMP+Pub:CODEMP+"\HX"+Pub:CODEMP+Pub:ANO+".CDX"
F78_HRDD:=Pub:DIRARCEMP+Pub:CODEMP+"\HDD"+Pub:CODEMP+Pub:ANO+".CDX"
F79_HFENP:=Pub:DIRARCEMP+Pub:CODEMP+"\HWW"+Pub:CODEMP+Pub:ANO+".CDX"
F80_HFMCL:=Pub:DIRARCEMP+Pub:CODEMP+"\HXX"+Pub:CODEMP+Pub:ANO+".CDX"
F81_HTEM:=Pub:DIRLOCAL+Pub:CODEMP+"\HTEMP0.CDX"
AADD( aFiles,F01_HFENX )
AADD( aFiles,F02_HFCEP )
AADD( aFiles,F03_HFENV )
AADD( aFiles,F04_HFVEN )
AADD( aFiles,F05_HFCLE )
AADD( aFiles,F06_HFCLI )
AADD( aFiles,F07_HCIE 聽)
AADD( aFiles,F08_HFAC 聽)
AADD( aFiles,F09_HPAG 聽)
AADD( aFiles,F10_HFENS )
AADD( aFiles,F11_HINV 聽)
AADD( aFiles,F12_HRAA 聽)
AADD( aFiles,F13_HRBB 聽)
AADD( aFiles,F14_HRCC 聽)
AADD( aFiles,F15_HMED 聽)
AADD( aFiles,F16_HMOV 聽)
AADD( aFiles,F17_HMOV 聽)
AADD( aFiles,F18_HMOV 聽)
AADD( aFiles,F19_HMOV 聽)
AADD( aFiles,F20_HMOV 聽)
AADD( aFiles,F21_HMOV 聽)
AADD( aFiles,F22_HMOV 聽)
AADD( aFiles,F23_HMOV 聽)
AADD( aFiles,F24_HMOV 聽)
AADD( aFiles,F25_HMOV 聽)
AADD( aFiles,F26_HMOV 聽)
AADD( aFiles,F27_HMOV 聽)
AADD( aFiles,F28_HPRO 聽)
AADD( aFiles,F29_HFCYZ )
AADD( aFiles,F30_HREM 聽)
AADD( aFiles,F31_HFENE )
AADD( aFiles,F32_HTRM 聽)
AADD( aFiles,F33_HFENR )
AADD( aFiles,F34_HGRU 聽)
AADD( aFiles,F35_HFBOD )
AADD( aFiles,F36_HCOM 聽)
AADD( aFiles,F37_HFCON )
AADD( aFiles,F38_HRDD 聽)
AADD( aFiles,F39_HFENP )
AADD( aFiles,F40_HFMCL )
AADD( aFiles,F41_HTEM 聽)
AADD( aFiles,F42_HFTEP )
AADD( aFiles,F43_HCOF 聽)
AADD( aFiles,F44_HFCOI )
AADD( aFiles,F45_HFENX )
AADD( aFiles,F46_HFCEP )
AADD( aFiles,F47_HFENV )
AADD( aFiles,F48_HFVEN )
AADD( aFiles,F49_HFCLI )
AADD( aFiles,F50_HFAC 聽)
AADD( aFiles,F51_HFENS )
AADD( aFiles,F52_HINV 聽)
AADD( aFiles,F53_HRAA 聽)
AADD( aFiles,F54_HRBB 聽)
AADD( aFiles,F55_HRCC 聽)
AADD( aFiles,F56_HMED 聽)
AADD( aFiles,F57_HMOV 聽)
AADD( aFiles,F58_HMOV 聽)
AADD( aFiles,F59_HMOV 聽)
AADD( aFiles,F60_HMOV 聽)
AADD( aFiles,F61_HMOV 聽)
AADD( aFiles,F62_HMOV 聽)
AADD( aFiles,F63_HMOV 聽)
AADD( aFiles,F64_HMOV 聽)
AADD( aFiles,F65_HMOV 聽)
AADD( aFiles,F66_HMOV 聽)
AADD( aFiles,F67_HMOV 聽)
AADD( aFiles,F68_HMOV 聽)
AADD( aFiles,F69_HPRO 聽)
AADD( aFiles,F70_HFCYZ )
AADD( aFiles,F71_HREM 聽)
AADD( aFiles,F72_HFENE )
AADD( aFiles,F73_HTRM 聽)
AADD( aFiles,F74_HFENR )
AADD( aFiles,F75_HGRU 聽)
AADD( aFiles,F76_HFBOD )
AADD( aFiles,F77_HCOM 聽)
AADD( aFiles,F78_HRDD 聽)
AADD( aFiles,F79_HFENP )
AADD( aFiles,F80_HFMCL )
AADD( aFiles,F81_HTEM 聽)