回 帖 发 新 帖 刷新版面

主题:修改表头问题

修改表头,执行通过,但表头没改??怎么回事。

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个回复)

沙发

好象少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

板凳

MODIFY FILE只是对文本进行操作,我不用打开我的表,我修改表头的目的也就是不能用其他如“计事本‘EXECL,VFP等直接打开而已。
MODIFY FILE不影响。

3 楼

文件指针被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 楼

??? fwrite(nFhdl,CHR(0)) 

是在文件尾写入  CHR(0)) 

不是替换第一个字符!!!

所以楼主的表达式是错误的!

5 楼

fseek(nFhdl,0)
后面是默认0了。
这个我也修改过,好像也不行啊。

??? fwrite(nFhdl,CHR(0)) 

是在文件尾写入  CHR(0)) 

不是替换第一个字符!!!

所以楼主的表达式是错误的!

?????怎么变成尾部了??

6 楼

小伙子,还是虚心点,对别人的帮助要仔细分析,不要轻易否定:
所有的语句,都是按照自己的,规则去运行。
不是按照你的意识想象去运行的。
仔细看看帮助文档吧,不要试图去,按自己的想象,去改造语句的运行规则!!!

7 楼

我在3楼发的贴,是经过验证正确以后写的。
你仔细看看。
先在命令窗口试试。

8 楼

这实际是对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,无论怎么加密,使用前均要解密,才能使用。 
无法使用:更改文件头。
不要在加密上下功夫了,实在感觉不好,就换数据库吧。

我来回复

您尚未登录,请登录后再回复。点此登录或注册