Que tal Manuel,
te comento como lo hago
1.tengo una funcion para abrir las dbf, antes de abrirla verifico si esta protegida con esto:
IF lFileProtect("MiArchivo.dbf")
DbProtect("MiArchivo.dbf",1) // con el 1 se desprotege
ENDIF
--> aqui ya abro la dbf
2. Al cerrar la dbf vuelvo a proteger la dbf
DbProtect("MiArchivo.dbf",0) // con el 0 se protege
aqui dejo las funciones del autor Alfredo Arteaga, gracias Alfredo.
FUNCTION lFileProtect(cDbf)
LOCAL nHandle :=0
LOCAL cBuffer :=Space(32)
LOCAL lRet :=.F.
IF (nHandle:=FOpen(cDbf,FO_READWRITE+FO_SHARED))!=-1
IF FRead(nHandle,@cBuffer,32)==32
lRet:=IF(SubStr(cBuffer,1,1)==Chr(26),.T.,.F.)
ENDIF
FClose(nHandle)
ELSE
MsgInfo("Error, No se pudo abrir la Base de Datos "+cDbf,"Verifique !!")
ENDIF
RETURN (lRet)
FUNCTION DbProtect(cDbf,nAction)
LOCAL nHandle:=0
LOCAL cBuffer:=Space(32)
nHandle:=FOpen(cDbf,FO_READWRITE+FO_SHARED)
DEFAULT nAction:=1
IF nHandle!=-1
IF FRead(nHandle,@cBuffer,32)==32
IF nAction==0 // Proteger
IF SubStr(cBuffer,1,1)<>Chr(26)
cBuffer:=Chr(26)+SubStr(cBuffer,1,31)
ENDIF
ELSE // Desproteger
IF SubStr(cBuffer,1,1)==Chr(26)
cBuffer:=SubStr(cBuffer,2,31)+ Chr(0)
ENDIF
ENDIF
FSeek(nHandle,0)
FWrite(nHandle,cBuffer,32)
ENDIF
FClose(nHandle)
ENDIF
RETURN (NIL)
Saludos
Paco