| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
免费IT实战开发视频教程合集分享千里之行 始于足下
共有 430 人关注过本帖
标题:请教遍历硬盘下所有文件包括子文件夹?
只看楼主 加入收藏
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:19
帖 子:378
专家分:888
注 册:2004-11-23
结帖率:100%
  已结贴   问题点数:20  回复次数:4   
请教遍历硬盘下所有文件包括子文件夹?
如题,我想扫描一下目前硬盘下所文件,包括子文件夹,就像杀毒软件一样,哪位大侠指导一下!


主要是想找一下我的软件关键数据或程序是否在此电脑上存在!

[此贴子已经被作者于2018-7-20 08:15编辑过]

2018-07-20 08:14
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:163
帖 子:6309
专家分:27558
注 册:2014-5-20
  得分:20 
IF 遍历磁盘文件("C:\temp\", "*.*", "文件表", .T.)
  SELECT 文件表
  REPLACE 文件名 WITH SPACE(级别*2) + RTRIM(文件名) ALL
  GO TOP
  BROWSE FIELDS 文件名:50,;
                文件大小:P="9,999,999,999",;
                修改日期, 修改时间, 文件属性, 文件夹
  USE
ENDIF

RETURN

***********************************************************************
**  遍历磁盘文件(c文件夹, c文件名, c临时表名, b所有子文件夹)
**
**  参数:c文件夹........要搜索的文件夹
**        c文件名........要搜索的文件名,可用通配符,如“*.*”
**        c临时表名......存放搜索结果的临时表别名
**        b所有子文件夹..是否搜索所有子文件夹,为.F.时只搜索“c文件夹”
**
**  返回:正常返回.T.,异常返回.F.
**
**  例:
**
**  IF 遍历磁盘文件("C:\temp\", "*.*", "文件表", .T.)
**    SELECT 文件表
**    REPLACE 文件名 WITH SPACE(级别*2) + RTRIM(文件名) ALL
**    GO TOP
**    BROWSE FIELDS 文件名:50,;
**                  文件大小:P="9,999,999,999",;
**                  修改日期, 修改时间, 文件属性, 文件夹
**    USE
**  ENDIF
***********************************************************************
FUNCTION 遍历磁盘文件(c文件夹, c文件名, c临时表名, b所有子文件夹)
  c文件夹 = ADDBS(c文件夹)

  IF (ADIR(a文件, c文件夹 + c文件名, "RASHD") > 0)  && 取首层文件夹信息
      * 保存文件信息的数组
      * 文件信息结构:
      * 文件名, 文件大小, 修改日期, 修改时间, 文件属性, 文件夹, 级别
    DIMENSION a文件表(1, 7)

    LOCAL i, n行号, n行数, n增加行数
   
    n增加行数 = ALEN(a文件, 1)
  
    DIMENSION a文件表[n增加行数, 7]                        && 增加文件数
   
    ASORT(a文件, 1)                                        && 按文件名排序

    FOR i = 1 TO n增加行数                                 && 保存文件信息
      a文件表[i,1] = a文件[i,1]
      a文件表[i,2] = a文件[i,2]
      a文件表[i,3] = a文件[i,3]
      a文件表[i,4] = a文件[i,4]
      a文件表[i,5] = a文件[i,5]
      a文件表[i,6] = c文件夹
      a文件表[i,7] = 0
    ENDFOR
   
    RELEASE a文件                                          && 释放“a文件”数组资源

    IF !EMPTY(b所有子文件夹)                               && 如果搜索所有子文件夹
      n行号 = 1                                            && 从第一个文件开始遍历搜索
      n行数 = ALEN(a文件表, 1)                             && 总文件数

      DO WHILE (n行号 <= n行数)                            && 遍历所有子文件夹
          * 如果是文件夹
        IF (RIGHT(a文件表[n行号,5],1) == "D")  AND !INLIST(a文件表[n行号,1], ".", "..")
            * 文件夹名
          c文件夹 = a文件表[n行号,6] + a文件表[n行号,1] + "\"
            * 用“[]”符号括起文件夹名表示
          a文件表[n行号,1] = "[" + a文件表[n行号,1] + "]"
          n级别 = a文件表[n行号, 7] + 1                     && 文件顺序级别
        
          IF (ADIR(a文件, c文件夹 + c文件名, "RASHD") > 0)  && 取文件夹信息
            n增加行数 = ALEN(a文件, 1)                      && 文件数
         
            DIMENSION a文件表[n行数 + n增加行数, 7]         && 增加文件信息行数
         
              * 插入增加的文件信息
            FOR i = n行数 TO n行号+1 STEP -1                && 原下面文件信息向底部移动
              a文件表[i + n增加行数, 1] = a文件表[i, 1]
              a文件表[i + n增加行数, 2] = a文件表[i, 2]
              a文件表[i + n增加行数, 3] = a文件表[i, 3]
              a文件表[i + n增加行数, 4] = a文件表[i, 4]
              a文件表[i + n增加行数, 5] = a文件表[i, 5]
              a文件表[i + n增加行数, 6] = a文件表[i, 6]
              a文件表[i + n增加行数, 7] = a文件表[i, 7]
            ENDFOR
   
            ASORT(a文件, 1)                                  && 按文件名排序
         
            FOR i = 1 TO n增加行数                           && 插入新增加的文件信息
              a文件表[n行号 + i, 1] = a文件[i, 1]
              a文件表[n行号 + i, 2] = a文件[i, 2]
              a文件表[n行号 + i, 3] = a文件[i, 3]
              a文件表[n行号 + i, 4] = a文件[i, 4]
              a文件表[n行号 + i, 5] = a文件[i, 5]
              a文件表[n行号 + i, 6] = c文件夹
              a文件表[n行号 + i, 7] = n级别
            ENDFOR
        
            RELEASE a文件                                    && 释放“a文件”数组资源
         
            n行数 = n行数 + n增加行数                        && 总文件数
          ENDIF
        ENDIF
      
        n行号 = n行号 + 1                                    && 继续处理下一个文件
      ENDDO
    ENDIF
      * 将文件信息数据存入临时表   
    CREATE CURSOR (c临时表名) (文件名 C(240), 文件大小 I, 修改日期 D, 修改时间 C(8),;
                               文件属性 C(5), 文件夹 C(240), 级别 I)
    APPEND FROM ARRAY a文件表 FOR !INLIST(RTRIM(文件名), ".", "..")

    RELEASE a文件表                                          && 释放“a文件表”数组资源
    RETURN .T.
  ELSE
    RETURN .F.
  ENDIF
ENDFUNC
2018-07-20 09:12
xmwld
Rank: 1
等 级:新手上路
帖 子:7
专家分:7
注 册:2010-11-13
  得分:0 
非常实用,学习了
2018-07-20 18:03
sdta
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:170
帖 子:7398
专家分:17475
注 册:2012-2-5
  得分:0 
操作系统有自带的搜索功能,楼主此举纯属多止一举。

坚守VFP最后的阵地
2018-07-20 19:40
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:19
帖 子:378
专家分:888
注 册:2004-11-23
  得分:0 
版主,我想查到我的程序文件是否在当前电脑上?

首先是查找文件名,文件夹名称,如果文件或文件夹被修改了怎么办?特别是文件,目前知道的特性是,exe文件有文件版本信息,已加入程序搜索,可以搜索文件的关键信息。

2018-07-23 18:12







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

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