介绍一个表文件加锁的程序
许多坛友热衷于保护表文件的保密,为了满足各位的需要,完成之前作出的承诺,这两天忙里偷闲完成了下面的小程序。这段程序主要是通过改写表文件的前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 编辑 ]