| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 937 人关注过本帖, 1 人收藏
标题:介绍一个表文件加锁的程序
取消只看楼主 加入收藏
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
结帖率:99.55%
收藏(1)
 问题点数:0 回复次数:3 
介绍一个表文件加锁的程序
许多坛友热衷于保护表文件的保密,为了满足各位的需要,完成之前作出的承诺,这两天忙里偷闲完成了下面的小程序。
这段程序主要是通过改写表文件的前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 编辑 ]
收到的鲜花
  • tlliqi2013-02-20 15:04 送鲜花  30朵   附言:谢谢分享
  • sdta2013-02-20 20:45 送鲜花  20朵  
搜索更多相关主题的帖子: 最好 
2013-02-20 14:47
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
以下是引用ycvf在2013-2-21 10:37:29的发言:

谢楼主,在VF6下直接运行程序,下行提示操作数不匹配。
IF FILE(SYS(5)+SYS(2003)+cFileName)
VFP6中好象没有sys(2003)函数。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2013-02-21 15:46
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
以下是引用wengjl在2013-2-21 14:45:13的发言:

要是能各自设置密码,就更好了
应该如何理解各自设置密码?如果是对数据表设置密码,本程序就无能为力了,应该这个小程序本身就是“加锁”,而不是“加密”。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2013-02-21 15:48
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
以下是引用ycvf在2013-2-21 18:35:11的发言:

do LOCKDBF *提示操作符或操作类型不匹配
DO lockdbf WITH 'e:\vfcs\考勤月报表.dbf' .T. *语法错误
DO lockdbf WITH 'e:\vfcs\考勤月报表.dbf', .T.
少了逗号分隔参数。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2013-02-21 22:14
快速回复:介绍一个表文件加锁的程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029649 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved