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