介绍一个表文件加锁的程序
许多坛友热衷于保护表文件的保密,为了满足各位的需要,完成之前作出的承诺,这两天忙里偷闲完成了下面的小程序。这段程序主要是通过改写表文件的前16个字节的内容,以便让VFP系统认为“不是一个表”而拒绝打开,从而达到保密数据的目的。由于仅仅是对表文件头进行处理,后面的数据未作任何改动,所以我称之为“加锁”而非“加密”。
特别说明:
1、这段程序虽然经过测试能正常使用,但因为存在电脑意外中断运行的情况,有可能会损坏表文件。请各位在加锁或解锁前最好作好备份,以备不测。
2、表文件解锁后可以在VFP系统下正常打开,此时是无密可保的。请各位再配合修改表文件后缀名的方式来防范非法访问。
程序代码:******************************************************
* DBFLOCK.PRG *
******************************************************
* 这是一个利用改写文件头对DBF表加锁的程序,加锁之后 *
* DBF表就不能正常打开,相当于加了一把锁。 *
******************************************************
* 调用参数(C):文件名(含后缀名) *
* 返回参数(L):T=操作成功,F=未找到指定的文件 *
* 调用方法: DO DBFLOCK WITH "文件全名",L *
* L=.T.表示加锁 *
* L=.F.表示解锁 *
******************************************************
* 程序编制者:HUJJ 2013.2 *
******************************************************
PARAMETERS cFileName,lCmd
IF FILE(SYS(5)+SYS(2003)+cFileName) &&查找是否存在指定的文件
MESSAGEBOX("没有找到指定的文件!",48,"操作错误")
RETURN .f.
ENDIF
nFid = FOPEN(cFileName,2) &&打开指定的文件
IF nFid = -1
MESSAGEBOX("指定的文件正在被使用,请先关闭文件再操作!",48,"操作错误")
RETURN .f. &&打开文件失败,返回失败标志
ENDIF
cTxt=FREAD(nFid,32) &&读入文件头32字节的内容
nAsc=ASC(cTxt) &&取首字节ASC码以确定原文件是否已经加过锁
IF nAsc=0 AND lCmd
FCLOSE(nFid) &&关闭文件
RETURN .T. &&已经是加过锁的表文件,直接返回
ENDIF
IF nAsc>0 AND !lCmd
FCLOSE(nFid) &&关闭文件
RETURN .T. &&已经是解锁的表文件,直接返回
ENDIF
cTxt=RIGHT(cTxt,16)+cTxt &&交换内容后再写回文件,完成加锁或解锁。
FSEEK(nFid,0,0)
FWRITE(nFid,cTxt,32)
FCLOSE(nFid) &&关闭文件
RETURN .t. &&返回成功标志[ 本帖最后由 hu9jj 于 2013-2-20 15:12 编辑 ]







