3 个解决方案
#1
提供一个支持通配符的文件匹配查找的程序:FindFiles
*------------------------------------------------------
作者:Foxer
今天赢一个网友的要求,做一个能够支持通配符的文件查找程序,希望对大家能有帮助。
这个程序有两个方面值得看:
1.这是一个递归程序,递归程序一般不大好写,容易陷入死循环或循环不完整
2.可以学习一下如何用数组返回函数的值。另外能学习一点儿ADIR、ADDBS这类目录函数的使用方法
我以前在这里也发过一个类似的程序,但是那个是找某一个文件的,这个程序是在那个程序的基础上改的,也算是我的一个进步。
现在转向C#,很少做VFP程序了,算是给大家的一个小礼物!
*------------------------------------------------------
作者: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程序了,算是给大家的一个小礼物!
*------------------------------------------------------
作者: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()