VFP可否遍历文件夹

时间:2022-10-16 11:27:33
文件夹A下有子文件夹A1,A2,A3,A4,A5共计5个,每个子文件夹中都有相同多个同结构的文件,用什么函数能一次性把这5个子文件中的所有文件的内容都添加到一个表中。

3 个解决方案

#1


提供一个支持通配符的文件匹配查找的程序:FindFiles 

*------------------------------------------------------

作者:Foxer
今天赢一个网友的要求,做一个能够支持通配符的文件查找程序,希望对大家能有帮助。 
这个程序有两个方面值得看: 
1.这是一个递归程序,递归程序一般不大好写,容易陷入死循环或循环不完整 
2.可以学习一下如何用数组返回函数的值。另外能学习一点儿ADIR、ADDBS这类目录函数的使用方法 

我以前在这里也发过一个类似的程序,但是那个是找某一个文件的,这个程序是在那个程序的基础上改的,也算是我的一个进步。 
现在转向C#,很少做VFP程序了,算是给大家的一个小礼物! 

Clear

Declare aFiles[1]
nFoundCount = FindFiles("C:\abc","*.*", @aFiles)
Clear
?"找到",nFoundCount,"个文件"
Display Memory Like aFiles

Function FindFiles
Lparameters cPath, cFindFile, aFindFiles
External Array aFindFiles
If Empty(cPath) Or Empty(cFindFile)
Return ""
Endif
cFindFile = Alltrim(Upper(cFindFile))
If Diskspace(cPath) < 0 && 不存在
Return ""
Endif
Declare aFindFiles[1]
nFoundCount = FileLocate(cPath, cFindFile, @aFindFiles)
Return nFoundCount
Endfunc
Function FileLocate
Lparameters cPath, cFindFile, aFindFiles
Private All
External Array aFindFiles

nFoundCount = 0
Local Array aFiles[1]
Local Array aMatchFiles[1]
nFiles = Adir(aFiles, Addbs(cPath) + "*.*","DRASH", 1)
nMatchFiles = Adir(aMatchFiles, Addbs(cPath) + cFindFile,"DRASH", 1)

If nMatchFiles> 0
For i = 1 To nMatchFiles
If Not (aMatchFiles[i,1] = "." Or aMatchFiles[i,1] = "..")
If "D" $ aMatchFiles[i,5] && 目录
Loop
Endif
nFoundCount = nFoundCount + 1
Declare aFindFiles[nFoundCount]
aFindFiles[nFoundCount] = Addbs(cPath) + aMatchFiles[i,1]
Endif
Endfor
Endif

If nFiles > 0
For i = 1 To nFiles
If aFiles[i,1] = "." Or aFiles[i,1] = ".."
Loop
Endif
If "D" $aFiles[i,5] && 目录
Local Array aSubFoundFiles[1]
nSubFoundCount = FileLocate(Addbs(cPath) + aFiles[i,1], cFindFile, @aSubFoundFiles)
If nSubFoundCount > 0 && 找到了
For j = 1 To nSubFoundCount
nFoundCount = nFoundCount + 1
Declare aFindFiles[nFoundCount]
aFindFiles[nFoundCount] = aSubFoundFiles[j]
Endfor
Endif
Endif
Endfor
Endif

Return nFoundCount
Endfunc

#2


可以使用ADIR,不过要递归处理子文件夹。

#3


学习ADIR()

#1


提供一个支持通配符的文件匹配查找的程序:FindFiles 

*------------------------------------------------------

作者:Foxer
今天赢一个网友的要求,做一个能够支持通配符的文件查找程序,希望对大家能有帮助。 
这个程序有两个方面值得看: 
1.这是一个递归程序,递归程序一般不大好写,容易陷入死循环或循环不完整 
2.可以学习一下如何用数组返回函数的值。另外能学习一点儿ADIR、ADDBS这类目录函数的使用方法 

我以前在这里也发过一个类似的程序,但是那个是找某一个文件的,这个程序是在那个程序的基础上改的,也算是我的一个进步。 
现在转向C#,很少做VFP程序了,算是给大家的一个小礼物! 

Clear

Declare aFiles[1]
nFoundCount = FindFiles("C:\abc","*.*", @aFiles)
Clear
?"找到",nFoundCount,"个文件"
Display Memory Like aFiles

Function FindFiles
Lparameters cPath, cFindFile, aFindFiles
External Array aFindFiles
If Empty(cPath) Or Empty(cFindFile)
Return ""
Endif
cFindFile = Alltrim(Upper(cFindFile))
If Diskspace(cPath) < 0 && 不存在
Return ""
Endif
Declare aFindFiles[1]
nFoundCount = FileLocate(cPath, cFindFile, @aFindFiles)
Return nFoundCount
Endfunc
Function FileLocate
Lparameters cPath, cFindFile, aFindFiles
Private All
External Array aFindFiles

nFoundCount = 0
Local Array aFiles[1]
Local Array aMatchFiles[1]
nFiles = Adir(aFiles, Addbs(cPath) + "*.*","DRASH", 1)
nMatchFiles = Adir(aMatchFiles, Addbs(cPath) + cFindFile,"DRASH", 1)

If nMatchFiles> 0
For i = 1 To nMatchFiles
If Not (aMatchFiles[i,1] = "." Or aMatchFiles[i,1] = "..")
If "D" $ aMatchFiles[i,5] && 目录
Loop
Endif
nFoundCount = nFoundCount + 1
Declare aFindFiles[nFoundCount]
aFindFiles[nFoundCount] = Addbs(cPath) + aMatchFiles[i,1]
Endif
Endfor
Endif

If nFiles > 0
For i = 1 To nFiles
If aFiles[i,1] = "." Or aFiles[i,1] = ".."
Loop
Endif
If "D" $aFiles[i,5] && 目录
Local Array aSubFoundFiles[1]
nSubFoundCount = FileLocate(Addbs(cPath) + aFiles[i,1], cFindFile, @aSubFoundFiles)
If nSubFoundCount > 0 && 找到了
For j = 1 To nSubFoundCount
nFoundCount = nFoundCount + 1
Declare aFindFiles[nFoundCount]
aFindFiles[nFoundCount] = aSubFoundFiles[j]
Endfor
Endif
Endif
Endfor
Endif

Return nFoundCount
Endfunc

#2


可以使用ADIR,不过要递归处理子文件夹。

#3


学习ADIR()