网络安全 频道

VFP编程技巧

  • 在VFP中如何历遍所有文件夹和文件

      在VFP中,能象一些杀毒软件那样,找遍磁盘的所有文件夹和文件吗?
    答案是肯定的,而且很简单:
    *利用VFP的Create Cursor -SQL命令建立有5个字段的临时库
    *结合前面提到的ADIR()函数便可完成。
    下面是具体代码:

    dqml=''C:'' &&需扫描的盘符
    use
    Create Cursor mylsdbf (wjmc c(120),wjcd n(10),wjrq d,wjshj c(10),wjsx c(6))
    xGS=1
    xCD=0
    append BLANK
    REPL wjmc WITH dqml
    do while !eof()
      nRecn=Recn()
      dqml=allt(wjmc)+''\''
      x=adir(Mysz,(dqml+''*.*''),''rashd'')
      if x<>0
        for I=3 to x
         Mysz(I,1)=dqml+Mysz(I,1)
         xGS=xGS+1
         xCD=xCD+Mysz(I,2)
        endf
        append from array Mysz for allt(wjmc)<>''.'' AND allt(wjmc)<>''..'' and ''D''$wjsx
      endi
      go nRecn
      skip
    endd
    use

    这里有以上例子的源代码实例下载


  • 在VFP如何利用低级文件操作函数读取*.INI文件

      VFP为我们提供了16个低级文件操作函数,充分利用这些函数,几乎可对所有文件进行本来只有汇编、C等语言才能进行的操作。
      *.INI文件其实也是ASCII码文本文件,只不过有其特定的规律而已。
      下面以读取system.INI中[boot.description]关键字里的mouse.drv标识符中的值为例来说明:

    nPath_ls=fullpath(''command.com'',2)
    nPath=strtran(nPath_ls,''COMMAND.COM'',''system\'')     &&取得Windows\system\的目录名
    dkwjm=nPath+''system.ini''                  &&需打开文件的路径和文件名
    Fp=Foren(dkwjm,0)                      &&以只读(默认方式0可以不用)打开文件
    if Fp<0
     wait wind ''打不开您指定的文件''
     retu
    endi
    do while !Feof(Fp)
      wjnr=Fgets(Fp)         &&从打开的文件中读取一行
      if atc(''mouse.drv'',wjnr)=1
       exit
      endi
    endd
    =Fclose(Fp)              &&关闭打开的文件
    x=atc(''='',wjnr)
    nQdz=iif(x>1,suns(wjnr,x+1),'''')   &&nQdz=''标准鼠标''字符串
    retu

    我只不过是说明如何运用VFP提供的这些函数,至于如何建立和改写文件,为何用Fgets()来读取数据而不用Fread()来读取数据等,可以查阅VFP帮助。VFP3.0的帮助是一本很好的中文教科书。

  • 如何改变文件的最后修改日期和时间

       在WINDOW 9X下我们没办法来改变一个文件的日期和时间,那在VFP能办到吗?
       在WINDOW 9X下文件的日期和时间有创建、修改和访问三种,在通常情况下我们所说的文件日期和时间指的是修改这一项。
       那在VFP下如何改文件日期和时间呢:
    Fp=Foren(''需打开的文件'',2)          &&以读写方式打开文件
    if Fp<0
      wait wind ''打不开您指定的文件''
      retu
    endi
    wjnr=Fread(fp,1)               &&从打开的文件头中读一个字节到wjnr
    =Fseek(Fp,0,0)                &&将文件指针移到文件头(回到原来的位置)
    =Fwrite(Fp,wjnr,1)              &&向打开的文件头中写入一个字节
    =Fclose(Fp)                  &&关闭打开的文件

    即把读取的那个字节原封不动的再写入文件,从而达到了将当前系统
    的日期和时间来改写文件的日期和时间目的。

   如何在程序的开始检测权限和根据权限操作

  •  在一个程序的开始部分,如何根据不同的口令字来区分不同的登权限,各自的
    口令字和权限设置又如何加以保密,以防止非法查看和修改?
      我们辛辛苦苦编制的程序又如何根据每台机器的硬件来加以判断用户的合法
    与非法,以防止非法拷贝?
      针对以上问题,我编制了一个简单的程序实例供有兴趣的朋友参考。

      该实例并非十分完美,也很简单,意在提供一种思路,大家可根据自己的情
    况,加以完善。
      实例共有一个数据表和四个模块组成,分别是:
      一、KLK.DAT 
    这是经过vfpjmdbf.vcx加密后的数据表,解密后的表结构如下:
    ========================================================
    表文件名: KLK.DBF
    数据记录数: 3
    最近更新的时间: 10/17/1999
    代码页: 936
    字段 字段名 中文含义 类型  宽度 小数位 索引 排序
     1  BH   编号  字符型  2   
     2  XM   姓名  字符型  8
     3 PASSKL 口令字 字符型 12
     4  QX   权限  数值型  1
     5 VARJB 硬盘卷标 数值型 12
    ** 总计 ** 36
    =========================================================

      二、Main.prg
    系统初始化主程序,大家在调试时务必首先运行它,否则后面的模块无法运行。
    它很简单:
    set stat off
    set scor off
    set date ansi
    set century on
    set hours to 24
    set escape off
    set dele on
    set safe off
    SET STATUS BAR OFF
    SET SYSMENU TO
    SET SYSMENU AUTOMATIC on
    shutdown quit
    debug0=.t. &&为后面的模块提供检测菜单是否运行的条件
    Dqml=sys(5)+sys(2003)+''\'' &&取当前目录,调试时请您改为本程序所在目录
    do (Dqml+''菜单1.mpr'')   &&打开菜单文件
    do form (Dqml+''pass'')  &&打开效验口令字表单
    read even
    on shutdown
    rele debug0
    set sysmenu on
    set sysmenu to defa
    on error

0
相关文章