|
-
- &&共享以下原创代码:
- *!* 获得给定目录下所有文件夹路径
- Function GetAllPath
- Lparameters tcRoot
- Local Array laDirs[1],aDirCount[1]
- Local i, N, m, lnRec, lcTblDir, lcDir, lnCount, lnSelect, lcPathStr
- lnSelect = Select()
- lcTblDir= Sys(2015)
- Create Cursor &lcTblDir (fldsn i(3),flddir C(200))
- Insert Into &lcTblDir. (fldsn,flddir) Values (0,Substr(tcRoot,1,Len(tcRoot)-1))
- i = 0
- m = Len(tcRoot)+1
- lcPathStr = ""
- Do While .T.
- Select Count(*) From (lcTblDir) Where fldsn=i Into Array aDirCount
- If aDirCount(1)=0
- Exit
- Endif
- Select (lcTblDir)
- Scan For fldsn=i
- lcDir = Alltrim(flddir) + ""
- lnCount = Adir(laDirs,lcDir + "*.", "D")
- lnRec = Recno()
- For N = 1 To lnCount
- If !("." $ laDirs(N,1) Or ".." $ laDirs(N,1))
- Insert Into &lcTblDir. (fldsn,flddir) Values (i+1,lcDir+laDirs(N,1))
- lcPathStr = lcPathStr + Iif(Empty(lcPathStr),"",",") + Substr(Alltrim(flddir),m)
- Endif
- Endfor
- Go lnRec In (lcTblDir)
- Endscan
- i=i+1
- Enddo
- Select (lnSelect)
- Return lcTblDir
- Endfunc
- &&一、用法:
- kk=GetAllPath("c:")
- Select (kk)
- Brow
- &&二、如果将最后一句改为“RETURN lcPathStr”可以得到给定目录下的所有文件夹相对路径(逗号隔开),这样有一个应用,可以动态设置搜索路径:
- lcPathStr=GetAllPath("c:\我的应用程序")
- Set Path To &lcPathStr
- &&以上方法有个好处,你随便移动数据表、表单等的位置,系统不会出现找不到文件的错误。新建文件夹时也会将其自动加到搜索路径中,这个方法在我的程序中已经成功应用。代码如下(代码放到主程序开始部分,主程序文件应放到应用程序文件夹的第一层):
- lcSys16 = Sys(16) &&查询当前运行程序名
- lcProgram = Substr(lcSys16, At(":", lcSys16) - 1)
- cDefaultPath=Left(lcProgram, Rat("", lcProgram))
- Cd Left(lcProgram, Rat("", lcProgram)) &&设置默认路径
- cSubDir = GetAllPath(cDefaultPath)
- Set Path To &cSubDir. Additive &&设置搜索路径
复制代码 |
|