主题:修改表头问题
我的心在飞
[专家分:0] 发布于 2008-05-28 11:08:00
修改表头,执行通过,但表头没改??怎么回事。
Local nFhdl,nKeyChr
nFhdl=fopen('yskd.dbf',12)
fseek(nFhdl,1)
nKeyChr=ASC(fread(nFhdl,1))
IF nKeyChr=ASC(CHR(48))
fseek(nFhdl,1)
fwrite(nFhdl,CHR(0))
endif
fclose(nFhdl)
特别是fwrite(nFhdl,CHR(0)) ??是不是有问题。写入时。
回复列表 (共8个回复)
沙发
alpen [专家分:1140] 发布于 2008-05-28 12:12:00
好象少modify 修改命令,可参照下面语句,查找原因
FOPEN( ) Function Example:
IF FILE('errors.txt') && Does file exist?
gnErrFile = FOPEN('errors.txt',12) && If so, open read-write
ELSE
gnErrFile = FCREATE('errors.txt') && If not, create it
ENDIF
IF gnErrFile < 0 && Check for error opening file
WAIT 'Cannot open or create output file' WINDOW NOWAIT
ELSE && If no error, write to file
=FWRITE(gnErrFile, 'Error information to be written here')
ENDIF
=FCLOSE(gnErrFile) && Close file
MODIFY FILE errors.txt NOWAIT && Open file in edit window
板凳
我的心在飞 [专家分:0] 发布于 2008-05-28 13:52:00
MODIFY FILE只是对文本进行操作,我不用打开我的表,我修改表头的目的也就是不能用其他如“计事本‘EXECL,VFP等直接打开而已。
MODIFY FILE不影响。
3 楼
LuckyLine [专家分:1940] 发布于 2008-05-28 14:30:00
文件指针被fseek()和fread()移动了,写到别的位置上了
Local nFhdl,nKeyChr
nFhdl=fopen('yskd.dbf',12)
fseek(nFhdl,0,0)
nKeyChr=ASC(fread(nFhdl,1))
IF nKeyChr=ASC(CHR(48))
fseek(nFhdl,0,0)
fwrite(nFhdl,CHR(0))
endif
fclose(nFhdl)
我想你是要把DBF文件的第一个字节的值由48改成0,是吧?
4 楼
cbl518 [专家分:57140] 发布于 2008-05-28 15:28:00
??? fwrite(nFhdl,CHR(0))
是在文件尾写入 CHR(0))
不是替换第一个字符!!!
所以楼主的表达式是错误的!
5 楼
我的心在飞 [专家分:0] 发布于 2008-05-29 08:36:00
fseek(nFhdl,0)
后面是默认0了。
这个我也修改过,好像也不行啊。
??? fwrite(nFhdl,CHR(0))
是在文件尾写入 CHR(0))
不是替换第一个字符!!!
所以楼主的表达式是错误的!
?????怎么变成尾部了??
6 楼
cbl518 [专家分:57140] 发布于 2008-05-29 09:12:00
小伙子,还是虚心点,对别人的帮助要仔细分析,不要轻易否定:
所有的语句,都是按照自己的,规则去运行。
不是按照你的意识想象去运行的。
仔细看看帮助文档吧,不要试图去,按自己的想象,去改造语句的运行规则!!!
7 楼
LuckyLine [专家分:1940] 发布于 2008-05-29 10:48:00
我在3楼发的贴,是经过验证正确以后写的。
你仔细看看。
先在命令窗口试试。
8 楼
l021126 [专家分:660] 发布于 2008-05-29 11:28:00
这实际是对dbf文件加密的问题,借花献佛,引用一段示例:
对DBF表进行加密或解密。
---------------------------------------------------------------
*前提:被操作的表如果已经打开,一定要先关闭
*---------------------------------------
DBF_JM('temp.dbf',1) &&加密
DBF_JM('temp.dbf',0) &&解密
FUNCTION DBF_JM
PARAMETERS filename,jm
IF AT('.',filename)=0
filename=filename+'.dbf' &&处理文件名
ENDIF
IF jm=1 &&加密
handle=FOPEN(filename,2) &&打开文件
keybite=FREAD(handle,1) &&读表头第一个字节
=FSEEK(handle,0) &&指针移回第一个字节
=FWRITE(handle,CHR(ASC(keybite)+2)) &&用比原来高2的ASCII字符改写
=FCLOSE(handle) &&关闭文件
ELSE &&解密
handle=FOPEN(filename,2)
keybite=FREAD(handle,1)
=FSEEK(handle,0)
=FWRITE(handle,CHR(ASC(keybite)-2)) &&用比原来低2的ASCII字符改写
=FCLOSE(handle)
ENDIF
ENDFUNC
*---------------------------------------
FUNCTION DBF_JieMi &&解密
PARAMETERS lfile
lfn=ALLTRIM(lfile)
lh=FOPEN(lfn,12)
=FSEEK(lh,0,0)
=FSEEK(lh,8)
lk1=FREAD(lh,1)
lk2=FREAD(lh,1)
=FSEEK(lh,0,0)
=FSEEK(lh,8)
=FWRITE(lh,CHR(ASC(lk1)-2),1)
=FWRITE(lh,CHR(ASC(lk2)-2),1)
=FCLOSE(lh)
RETURN
ENDFUNC
FUNCTION DBF_JiaMi &&加密
PARAMETERS lfile
lfn=ALLTRIM(lfile)
lh=FOPEN(lfn,12)
=FSEEK(lh,0,0)
=FSEEK(lh,8)
lk1=FREAD(lh,1)
lk2=FREAD(lh,1)
=FSEEK(lh,0,0)
=FSEEK(lh,8)
=FWRITE(lh,CHR(ASC(lk1)+2),1)
=FWRITE(lh,CHR(ASC(lk2)+2),1)
=FCLOSE(lh)
RETURN
ENDFUNC
不过,说到底,即使加密了,用文本打开也会看到一些内容的。即使间接实现了也不安全,DBF的存储方式就注定了不安全。
用DBF,无论怎么加密,使用前均要解密,才能使用。
无法使用:更改文件头。
不要在加密上下功夫了,实在感觉不好,就换数据库吧。
我来回复