注册 登录
编程论坛 VFP论坛

求助,多个文件夹下的所有文件加到另外个文件中

siruding 发布于 2024-08-06 15:45, 528 次点击
每个文件的格式都一样。

D:\JIN\500131\1.DBF
D:\JIN\500131\2.DBF
D:\JIN\500131\3.DBF

D:\JIN\500132\1.DBF
D:\JIN\500132\2.DBF
D:\JIN\500132\3.DBF

JIN目录下的500131和500132这两个目录每天都不一样,可能会是500134或515635目录,或是其他的什么代码,但1,2,3.DEF文件名每天都不变的。

怎么实现每天运行以后JIN目录下的所有1,2,3.DBF 的内容加到D:\JIN\JJTBK.DBF里面。

向大神求助。

7 回复
#2
easyppt2024-08-06 16:20
思路:
利用 adir() 获取目录及文件列表,然后再循环处理每个dbf,把数据附加到D:\JIN\JJTBK.DBF里面
#3
siruding2024-08-06 16:26
回复 2楼 easyppt
ADIR()这个函数不太会用,能具体点吗,谢谢。
#4
sdta2024-08-06 16:44
*************************************************************
* 4、如何读取文件夹及文件夹下的文件(仅供参考)
*************************************************************
TOPDIR = INPUTBOX([要查找的文件夹:],[查找文件],SYS(5)+SYS(2003)) && 父文件夹
MDLEVE =1                                                         && 父文件夹为第一层
CREATE CURSOR DIRSTRU (DLEVE N(8),DATTRIBUTE C(5),DNAME C(250) )
INSERT INTO DIRSTRU VALUES (MDLEVE,[D],TOPDIR)                    && 将父文件夹添加到表中
DO WHILE .T.
   SELE * FROM DIRSTRU INTO CURSOR TMDIR WHERE DLEVE = MDLEVE     &&读取第DLEVE层文件夹
   IF EOF()
      EXIT                                                        && 若无下一层文件夹结束当前循环
   ENDIF
   SCAN                                                           && 处理当前文件夹
      NCOUNT =ADIR(DIRARR, ALLTRIM(DNAME)+[\*.*],[DHS])           && 当前文件夹下的子文件夹数量
      CDIR = ALLTRIM(DNAME)+[\]                                   && 当前路径(文件夹)
      NFILE =ADIR(FILEARR, ALLTRIM(DNAME)+[\*.dbf],[AHRS])          && 当前文件夹下的文件夹数量
      FOR I = 1 TO NCOUNT                                         &&读取当前文件夹下的子文件夹
          IF [D]$ DIRARR(I,5) AND NOT INLIST(DIRARR(I,1),[.],[..])
             INSERT INTO DIRSTRU VALUES (MDLEVE+1,DIRARR(I,5),CDIR + DIRARR(I,1))
          ENDIF
      ENDFOR
      FOR J=1 TO NFILE                                            && 读取当前文件夹下的文件
          INSERT INTO DIRSTRU VALUES (MDLEVE+1,FILEARR(J,5),CDIR + FILEARR(J,1))
      ENDFOR
   ENDSCAN
   MDLEVE = MDLEVE +1
ENDDO
SELECT dname FROM DIRSTRU WHERE ".DBF"$dname ORDER BY dname
#5
csyx2024-08-06 16:45
大概这样,随便写的没测试

cRoot = 'd:\jin'
set default to (cRoot)

select 0
use JJTBK

for ii = 1 to adir(aDirs, '', 'D')
  cDir = aDirs[ii,1]
  if inlist(cDir, '.', '..')
    loop
  endif
  cPath = addbs(addbs(cRoot) + cDir)
  append from (cPath + '1.dbf')
  append from (cPath + '2.dbf')
  append from (cPath + '3.dbf')
endfor



[此贴子已经被作者于2024-8-6 16:47编辑过]

#6
siruding2024-08-06 17:37
回复 5楼 csyx
我试了一试,能跑通。
还有请教一下 cDir = aDirs[ii,1]
             inlist(cDir, '.', '..')
这两句是啥意思,谢谢。

[此贴子已经被作者于2024-8-6 17:52编辑过]

#7
csyx2024-08-06 20:26
cDir = aDirs[ii,1]     && 取子目录名称,另外的 2/3/4 列分别是 大小/最后修改的日期/时间,vfp 帮助里都有写
inlist(cDir, '.', '..')   && .  代表当前目录, 你电脑上就是 d:\jin
              && .. 代表上级目录,你电脑上就是 d:\
              && 你的需求是找出 jin 下的子目录,自然要排除它俩
              && 这俩项目是固定的,即使空目录也有这两项,到 cmd 窗口去看看就知道了

只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2024-8-6 21:04编辑过]

#8
siruding2024-08-07 13:02
回复 7楼 csyx
好的太感谢了,顺便问一下,有没有什么vfp的教材可以推荐一下,突然感觉自己会的东西只是冰山一角。

为什么我的帮助是英文的。

[此贴子已经被作者于2024-8-7 13:05编辑过]

1