Cabe señalar que si usas el proceso al entrar o al salir de tu sistema para que se haga automáticamente, podrías dirigir el respaldo al equipo local y no necesariamente tienen que abrirse los archivos en uso exclusivo
vDir = FULLPATH(Thisform.txtRutaResp.Value) && Mi destino
IF EMPTY(vDir)
WAIT WINDOW 'No se ha especificado directorio para respaldos'+CHR(13)+;
'Entre a redefinir la empresa para hacerlo' NOWAIT
RETURN .F.
ENDIF
IF !DIRECTORY(vDir)
MD (vDir)
ENDIF
nRsp = DTOS(DATE())
*- Uso una función _Dia que me da el nombre del día se la semana y así se vaya sobreescribiendo cada semana
lcFile = ALLTRIM(_Dia(DOW(DATE())))+'.zip'
lcRutaFile = vDir+'\'+lcFile
archivos = ADDBS(oApp.ruta) && oApp.ruta es el path de la base de datos (DBF, DBC, DCT, etc.)
myDir = archivos + "*.*"
LOCAL nFiles as Integer
nFiles = ADIR(aTablas, myDir)
IF nFiles = 0
RETURN .F.
ENDIF
CLOSE TABLES ALL
CLOSE DATABASES ALL
WAIT WINDOW 'Añadiendo datos al archivo Zip...' NOWAIT
SET LIBRARY TO vfpCompression.fll
ZipOpen(lcRutaFile)
FOR x=1 TO nFiles
ZipFile(archivos + aTablas(x,1), .T.)
NEXT
ZipClose()
SET LIBRARY TO
Thisform.txtArchivozip.Value = 'Archivo '+lcFile+' generado.'
Thisform.Refresh()
WAIT WINDOW 'Respaldo terminado.' NOWAIT