找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 3839|回复: 0

[开源] 获得给定目录下所有文件夹路径-非递归方法

[复制链接]

1214

主题

352

回帖

11

精华

管理员

菜鸟

积分
93755

贡献奖关注奖人气王精英奖乐于助人勋章

发表于 2010-5-11 07:05:12 | 显示全部楼层 |阅读模式

  1. &&共享以下原创代码:
  2. *!* 获得给定目录下所有文件夹路径
  3. Function GetAllPath
  4. Lparameters tcRoot
  5. Local Array laDirs[1],aDirCount[1]
  6. Local i, N, m, lnRec, lcTblDir, lcDir, lnCount, lnSelect, lcPathStr
  7. lnSelect = Select()
  8. lcTblDir= Sys(2015)
  9. Create Cursor &lcTblDir (fldsn i(3),flddir C(200))
  10. Insert Into &lcTblDir. (fldsn,flddir) Values (0,Substr(tcRoot,1,Len(tcRoot)-1))
  11. i = 0
  12. m = Len(tcRoot)+1
  13. lcPathStr = ""
  14. Do While .T.
  15. Select Count(*) From (lcTblDir) Where fldsn=i Into Array aDirCount
  16. If aDirCount(1)=0
  17.   Exit
  18. Endif
  19. Select (lcTblDir)
  20. Scan For fldsn=i
  21.   lcDir = Alltrim(flddir) + ""
  22.   lnCount = Adir(laDirs,lcDir + "*.", "D")
  23.   lnRec = Recno()
  24.   For N = 1 To lnCount
  25.    If !("." $ laDirs(N,1) Or ".." $ laDirs(N,1))
  26.     Insert Into &lcTblDir. (fldsn,flddir) Values (i+1,lcDir+laDirs(N,1))
  27.     lcPathStr = lcPathStr + Iif(Empty(lcPathStr),"",",") + Substr(Alltrim(flddir),m)
  28.    Endif
  29.   Endfor
  30.   Go lnRec In (lcTblDir)
  31. Endscan
  32. i=i+1
  33. Enddo

  34. Select (lnSelect)
  35. Return lcTblDir
  36. Endfunc

  37. &&一、用法:
  38. kk=GetAllPath("c:")
  39. Select (kk)
  40. Brow
  41. &&二、如果将最后一句改为“RETURN lcPathStr”可以得到给定目录下的所有文件夹相对路径(逗号隔开),这样有一个应用,可以动态设置搜索路径:
  42. lcPathStr=GetAllPath("c:\我的应用程序")
  43. Set Path To &lcPathStr
  44. &&以上方法有个好处,你随便移动数据表、表单等的位置,系统不会出现找不到文件的错误。新建文件夹时也会将其自动加到搜索路径中,这个方法在我的程序中已经成功应用。代码如下(代码放到主程序开始部分,主程序文件应放到应用程序文件夹的第一层):
  45. lcSys16 = Sys(16) &&查询当前运行程序名
  46. lcProgram = Substr(lcSys16, At(":", lcSys16) - 1)
  47. cDefaultPath=Left(lcProgram, Rat("", lcProgram))
  48. Cd Left(lcProgram, Rat("", lcProgram)) &&设置默认路径
  49. cSubDir = GetAllPath(cDefaultPath)
  50. Set Path To &cSubDir. Additive &&设置搜索路径

复制代码
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表