回复 2楼 sdta
我是用过这个函数,抄来的。具体代码如下:
LPARAMETERS 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,则表明这是一个目录,执行下一行命令。
ThisForm.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, 3]=CTOT([&lafilesdt1 &lafilesdt2])
Npath=SUBSTR(m.tcFolder,pathlong+1) && +1
Npath=SUBSTR(Npath,1,LEN(Npath)-1)
Npath=Npath+'\'
INSERT INTO files0 VALUES (Npath, m.lafiles[m.ii, 1], m.lafiles[m.ii, 2], m.lafiles[m.ii, 3]) && 将数据录入到表中;此处不能用listfiles代替m.tcFolder
ENDCASE
ENDFOR
我将搜索结果形成若干个.dbf临时表文件,任务完成之后删除。问题出在退出程序的时候,不意间发现临时表文件出现的过程目录之下。
据此看来,我其实是要找出能删除所有filse*.dbf的办法,不论它们出现在哪一个过程目录中。