如何在FoxPro中遍历指定起始目录下的嵌套目录
FoxPro 递归遍历目录并输出文件/目录名称及修改日期
以下是实现递归遍历指定目录、输出所有子目录/文件名及最后修改日期的FoxPro代码,完全适配多层嵌套场景,同时处理空目录的标注:
PROCEDURE TraverseDirectory LPARAMETERS tcStartPath LOCAL laDirInfo[1], lnCount, i, lcFullPath, lcModDate * 确保路径末尾带反斜杠,避免拼接错误 IF RIGHT(tcStartPath, 1) != "\" tcStartPath = tcStartPath + "\" ENDIF * 获取当前目录下所有文件和子目录信息 lnCount = ADIR(laDirInfo, tcStartPath + "*.*", "DHS") * ADIR参数说明:"D"包含目录,"H"包含隐藏文件,"S"包含系统文件(可按需调整) IF lnCount = 2 * 当前目录仅含.和..,判定为空目录 ? ALLTRIM(SUBSTR(tcStartPath, 1, LEN(tcStartPath)-1)) + "(内部无内容)" RETURN ENDIF * 遍历每一个条目 FOR i = 1 TO lnCount * 跳过.和..目录 IF laDirInfo[i, 1] = "." OR laDirInfo[i, 1] = ".." LOOP ENDIF lcFullPath = tcStartPath + laDirInfo[i, 1] * 格式化最后修改日期 lcModDate = DTOS(laDirInfo[i, 3]) + " " + TTOC(laDirInfo[i, 3]) IF laDirInfo[i, 5] = "D" * 是子目录,先输出目录名和修改日期 ? laDirInfo[i, 1] + " | 修改日期:" + lcModDate * 递归遍历子目录 DO TraverseDirectory WITH lcFullPath ELSE * 是文件,输出文件名和修改日期 ? laDirInfo[i, 1] + " | 修改日期:" + lcModDate ENDIF ENDFOR ENDPROC * 调用示例:替换为你的起始路径 DO TraverseDirectory WITH "C:\Your\Target\Directory"
代码说明:
- 递归逻辑:通过
DO TraverseDirectory WITH lcFullPath实现多层目录的深度遍历,自动处理嵌套结构。 - ADIR()函数:核心工具,一次性获取当前目录的所有文件/目录信息,返回的数组包含名称、大小、修改日期、属性等字段。
- 空目录判断:当ADIR仅返回.和..两个条目时,判定为空目录并输出对应标注。
- 日期格式化:用
DTOS()和TTOC()将ADIR返回的日期时间值转换为易读的字符串格式。
输出示例(匹配你的需求):
假设起始目录结构如你描述,运行后会输出类似内容:
appendix | 修改日期:20240520 14:30:00
a1 | 修改日期:20240520 14:31:00
a1text.txt | 修改日期:20240520 14:32:00
a2 | 修改日期:20240520 14:33:00
a2text.txt | 修改日期:20240520 14:34:00
aTotal.txt | 修改日期:20240520 14:35:00
index(内部无内容)
names | 修改日期:20240520 14:36:00
allnames.txt | 修改日期:20240520 14:37:00
如果需要将结果保存到文件,可在调用前执行:
SET ALTERNATE TO "目录遍历结果.txt" SET ALTERNATE ON
结束遍历后执行:
SET ALTERNATE OFF
内容的提问来源于stack exchange,提问作者DizzleBeans
相关产品推荐
相关产品推荐

