回复 14楼 csyx
1.thisform都去除;
2.Apath=SYS(5)+[\]+Apath
这一句还真错了,Apath直接表达为【E:\WORDS】
改正之后下面代码能产生files1表,却没有录入数据[INSERT INTO files1 VALUES (……]
CREATE TABLE files1 (文件名 C(160), 路径 C(28), 修改时间 T)
&& 创建表模板; 2024.5.11修改
FUNCTION wjtran(tcFolder)
LOCAL ARRAY laFiles[1]
&& 创建的数组laFiles,[1]表示一组。
LOCAL lcFileName,ii
&& 缺少这一步,会漏掉许多内容。
m.tcFolder=ADDBS(m.tcFolder)
&& 向路径表达式添加一个反斜杠;没有这条,子目录出不来。
IF ADIR(m.laFiles, m.tcFolder + '*.*', 'ARD', 1) < 3
&& 若是文件长度小于3个字节,则不计算;少了D,不能进入子目录。
RETURN .F.
ENDIF
ASORT(m.laFiles, 3, -1, 1)
&& 按第3列排序数组,最后一位数大于0为降序排序。
FOR m.ii=1 TO ALEN(m.laFiles,1)
&& LAN(数组名,数组属性),0[返回数组元素数目],1[返回数组的行数],2[返回数组的列数]。
m.lcFileName=m.laFiles[m.ii,1]
&& m.laFiles是 . ;缺少这一步,后面进行不下去
DO CASE
CASE '.'==m.lcFileName Or '..'==m.lcFileName
&& 设此可避免直接进入OTHERWISE,出现死循环
CASE AT('D',m.laFiles[m.ii,5]) > 0
&& 该位置若是D,则表明这是一个目录,执行下一行命令。
wjtran(m.tcFolder + m.lcFileName)
&& listfiles与m.tcFolder都是目录的路径,m.lcFileName则是子目录名称
OTHERWISE
lafilesdt1=DTOC(m.lafiles[m.ii, 3])
&& 字符型日期
lafilesdt2=m.lafiles[m.ii, 4]
&& m.lafiles[m.ii, 4]是文件的时间值
m.lafiles[m.ii, 2]=CTOT([&lafilesdt1 &lafilesdt2])
&& 字符日期时间
Npath=SUBSTR(m.tcFolder,pathlong+1)
&& Npath是子目录+孙目录
Npath=SUBSTR(Npath,1,LEN(Npath)-1)
Npath=Npath+'\'
INSERT INTO files1 VALUES (m.lafiles[m.ii, 1], m.tcFolder, m.lafiles[m.ii, 2])
&& 将数据录入到表中;此处不能用listfiles代替m.tcFolder
ENDCASE
ENDFOR
ENDFUNC
3.删除DO wjtran语句,直接跟上FUNCTION wjtran(tcFolder),结果产生了files1.dbf文件,但是没有数据被录入,而在表单过程程序之后,数据被录进表中;
4.宏替换表达的结果是正确的,不能不用。
[此贴子已经被作者于2024-5-29 12:07编辑过]