当前位置: 代码迷 >> VFP >> VFP的相对路径如何弄
  详细解决方案

VFP的相对路径如何弄

热度:9023   发布时间:2013-02-26 00:00:00.0
VFP的相对路径怎么弄
我做的程序都使用的都是相对路径,拿到别人电脑就不好使了,怎样改才能拿到别人的电脑上也好用,不分所在磁盘,请大家指教。

------解决方案--------------------------------------------------------
本人一直用以下方法,共享一下:

*!*设置默认及搜索路径
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  &&搜索路径


以上设置方法有个好处,在软件目录中任意创建文件夹多层也可,此程序会自动将其设置为搜索路径,调用文件只用名称即可,不用关心他存放在那里,vfp会自动到默认路径和搜索路径中找,只有不同文件夹中有同名文件时,直径一下他所在的文件夹即可,其他时候不用多考虑路径。

本人原创的GetAllPath自定义函数如下:

FUNCTION GetAllPath
LPARAMETERS tcRoot
LOCAL ARRAY laDirs[1],aDirCount[1]
LOCAL i, n, nRec, cStr, cTblDir, cDir, nCount, cOldTbl

cOldTbl = ALIAS()

cTblDir= SYS(2015)
CREATE CURSOR &cTblDir (fldsn I(3),flddir C(200))
INSERT INTO &cTblDir. (fldsn,flddir) VALUES (0,SUBSTR(tcRoot,1,LEN(tcRoot)-1))

i=0
DO WHILE .T.
SELECT COUNT(*) FROM (cTblDir) WHERE fldSn=i INTO ARRAY aDirCount
IF aDirCount(1)=0
EXIT
ENDIF
SELECT (cTblDir)
SCAN FOR fldSn=i
cDir =ALLTRIM(flddir)+"\"
nCount=ADIR(laDirs,cDir+"*.","D")
nRec =RECNO()
FOR n=1 TO nCount
IF !("." $ laDirs(n,1) OR ".." $ laDirs(n,1))
INSERT INTO &cTblDir. (fldsn,flddir) VALUES (i+1,cDir+laDirs(n,1))
ENDIF
ENDFOR
SELECT (cTblDir)
GO nRec
ENDSCAN
i=i+1
ENDDO


SELECT (cTblDir)
n= LEN(tcRoot)+1
cStr = ""
SCAN FOR fldsn>0
cStr = cStr+IIF(EMPTY(cStr),"",",") + SUBSTR(ALLTRIM(flddir),n)
ENDSCAN

USE IN (cTblDir)

IF NOT EMPTY(cOldTbl)
SELECT (cOldTbl)
ENDIF

RETURN cStr
ENDFUNC