主题:路径,真的很难吗?(系列一)
供初学者和爱好者参考
用老狐狸搞开发(哪怕仅仅是学习阶段),往往生成一大堆文件(并且可能需要其它的许多文件,比如图片啊、资源啊、头文件啊等等),这就涉及到这些文件的保存位置的问题。初学者常常遇到找不到文件的事情,我明明做了一个form1,也保存了,文件名是form1.scx,可是我DO FORM form1,竟然说找不到文件;更有甚者,说:我保存了表,但退出VFP后,我不知道表文件哪里去了?老鸟们会觉得可笑,不过当初俺也是经常遇到这样的情况。今天不妨谈谈。
先举个例子。比如你的盘上确实有个表tb1.dbf(假设表tb1.dbf保存在E:\123文件夹中,这个假设在本贴后面仍然有效),当你 Use tb1.dbf 时,VFP却毫不客气弹出对话框“找不到tb1.dbf”。这个“找不到”对话框给我们一些提示,一是你一定使用了这样的命令,该命令要使用一个盘上的文件(比如DO个prg、USE个表);二是VFP去寻找过你要用的文件,只是没找到。为什么找不到,明明有嘛?你这个老狐狸在哪儿找文件的?是不是没有到E:\123文件夹中找?
这就要求我们应该了解VFP寻找文件遵循的规则。那些使用文件的命令在语法上允许文件名带有完整路径(绝对路径),因此如果给出文件完整路径并且文件确实在那里,那么这个“找不到”对话框永远都不会出现。使用 Use E:\123\tb1.dbf 没问题,它直接指明了VFP到E:\123文件夹中找个叫tb1.dbf的文件,这当然OK。看来照猫画虎,如果我有个xxx.scx在F:\test\1文件夹中,那么运行这个表单就用 DO FORM F:\test\1\xxx.scx ,对极了。
不过、不过,不要以为这就一切OK了,那些命令同样允许文件名以相对路径的形式出现(后面将会谈到事实上我们应该采用相对路径),看看 Use tb1.dbf ,仅仅出现文件名(其实隐含着相对路径,就是当前工作路径),换句话说,VFP要到当前的工作路径下去寻找tb1.dbf,那么工作路径是什么?
1.VFP的工作路径(以下提到的工作路径、工作目录、工作文件夹3个概念相同,好比土豆、马铃薯、洋芋)
通俗地讲,工作路径就是一个文件夹(早期称为目录),VFP把生成的文件默认存放到这个文件夹(除非你在保存时指定了其它文件夹),并且当VFP要使用文件时(特别是以相对路径形式写出的命令),也在这个文件夹中找(这个说法不全面,后面补充)。所以工作路径很、十分、非常、very重要,使用VFP时,你应该时刻清楚目前的工作路径是什么。
不管372十1,命令窗口中执行命令 ?SYS(5)+SYS(2003) 总能显示出当前工作路径是什么。假如你执行了该命令,并且假设在主窗口中显示D:\MYPRJ,那说明当前工作路径是D盘的MYPRJ文件夹,这时执行 Use tb1.dbf ,VFP就会在D:\MYPRJ中寻找tb1.dbf。于是,讨厌的“找不到”对话框就来了。
说到这里,你应该有一些想法:“嗯,如果我的表tb1.dbf就保存在D:\MYPRJ中;或者要是工作路径就是E:\123,那么执行 Use tb1.dbf 应该没问题”。Very Good 这样的想法很正确。
这包含两个方面的问题,一是保存文件时应该放到哪里的问题,二是更改工作路径的问题。
这里我们继续谈工作路径。
当你安装VFP时,如果一路“确定”、“OK”、“同意”......(傻瓜式安装),一般的安装于系统盘的Program Files文件夹下的Microsoft Visual FoxPro 9文件夹。这里假设系统盘是C,则完整的安装路径是C:\Program Files\Microsoft Visual FoxPro 9\。按常规方式启动VFP(开始-程序-......),并且没有做过工作路径的更改(怎么改后面说),VFP有个默认的工作路径,就是"我的文档"下面自动建一个Visual FoxPro Projects的文件夹。换句话说,你用VFP生成的项目、表、表单等等,统统往这里存放。你可以用?SYS(5)+SYS(2003)在命令窗口中执行一下看,或者Tools菜单中选择Options,弹出对话框中找到File Locations页面,里面有个Default Directory项,选中它单击Modify按钮,可以看到新弹出的窗口中有灰色的路径,正是"我的文档"下面的Visual FoxPro Projects文件夹。这是个改进,早期版本的默认工作路径就是安装路径,那是比较糟糕的,因为安装路径下面有许多VFP的系统文件,如果直接使用这个工作路径,你自己生成的一大堆文件和这些已有文件混在一起,会很麻烦。9版本的这个改进还算不错,不过,嘿嘿,9版本很容易重犯老毛病(后面说)。
现在,你生成任何文件,如果没有在保存对话框中改变文件夹,或者使用命令生成文件,并且命令中文件名都不带路径,那么都会保存到"我的文档"下面的Visual FoxPro Projects文件夹中,那么你DO个FORM、USE个表,VFP会在这个文件夹中找东西,呵呵,都在,那没问题。可问题还是有,试想你在学习阶段今天建个项目、明天又建另一个项目,所有文件都在一起,岂不乱套。所以我们常常一个项目一个文件夹,各自分开,并且不一定非要在Visual FoxPro Projects文件夹中。这就涉及到更改工作路径。
(等等,我刚开始学习不久,还不清楚你说的项目为何物,也要象你说的,得考虑文件保存位置,还有什么工作路径吗?
是的,应该考虑。比如你才开始学习建表建库,必然要生成文件,如果不考虑路径,今天完成实验1,建一个商品库,明天完成实验2,建一个图书资料库,这些文件默认全都放到同一个工作路径下,混杂在一起,是很麻烦的。而且往往初学时喜欢用VFP给的默认文件名table1啊table2啊的,很可能今天建的table1覆盖了昨天建的table1,昨天的实验成果就玩完了。好的方式是针对不同的实验,建不同的文件夹,进行每一个实验时,先把对应的文件夹设置为工作文件夹。)
2.更改工作路径
先说一个不用做任何设置而改变工作路径的懒办法(该办法适用于你没有对工作路径进行过更改,包括使用菜单方式、命令方式以及配置文件的方式更改),不用常规方式启动VFP,直接到保存有VFP文件(dbf啊、prg啊、scx啊、mnu啊等等)的文件夹,双击某个文件,VFP启动并打开该文件,这时工作路径就是该文件夹。比如直接打开E:\123文件夹,双击tb1.dbf,这时工作路径就是E:\123。(特别提醒,不推荐双击dbf文件,原因不在本贴涉及范围,故不讨论,一般去双击项目文件prj)
本段小结:在没有使用菜单方式、命令方式以及配置文件的方式更改工作路径时,从哪个文件夹双击VFP的文件,工作目录就是哪个文件夹。
这个特性可以解释下面的例子:
我没更改过工作路径,我建了一个表单xxxx.scx,保存时我特意在保存对话框中换了一个文件夹(比如D:\myscx),接着在命令窗口执行DO FORM xxxx.scx ,系统说找不到。我关闭VFP,直接打开D:\myscx文件夹,双击xxxx.scx文件,VFP启动并出现表单设计器,这时执行DO FORM xxxx.scx就可以。
下面来说通过设置改变工作路径,其实上面已经说到了3种方法,先看菜单方式,就是Tools菜单中选择Options,弹出对话框中找到File Locations页面,里面有个Default Directory项,选中它单击Modify按钮,新弹出的窗口中选中Use Default Directory,这时可以直接输入路径或者单击3个小点按钮选择某个文件夹,然后确定。接下来你将面临两种选择,一是直接确定,另一个是先Set As Default(设为默认)再确定。第一种选择是短命的,一旦退出VFP,再启动,你的设置就白费了。第二种长命百岁,任何时候启动VFP,工作路径都是那个设置好的路径,除非你又改过。
这里顺便说说刚才提到的老毛病,那就是当你通过菜单又把Use Default Directory改为不使用,并且先Set As Default再确定。看似回到了刚安装时候的状态,不过这时退出再次启动,默认工作路径就成了安装路径了。
再看命令方式,习惯上使用SET DEFAULT TO <路径> 命令,当然还有些命令也会改变工作路径,但不推荐。这种命令更改的方式等效于菜单方式下的短命设置,只要退出VFP,这个设置就玩完了。
最后说说配置文件,你可以自行建立一个文本文件,命名为config.fpw,文件中可以来一句: DEFAULT=<路径>,并把它保存到VFP的安装路径下,那么VFP正常启动时就会把你写的路径设置为工作路径。(配置文件绝对是个好东东,很有用,不过下文不再出现它,因为和本贴涉及的路径内容关系不算特别铁)
不管怎样,现在你应该知道工作路径的概念——VFP工作时使用的一个文件夹,你可以把自己的文件夹设置为工作路径,VFP把生成的文件默认存放到这个文件夹,并且当VFP要使用文件时,也在这个文件夹中找(除非你给出了文件的绝对路径)。这样,你能回答下列常见问题:
(1)我用命令Create tb2生成表文件tb2.dbf,请问我的这个表文件保存到哪里去了?
答:当然保存在工作路径下面(没给路径、直接表名)
(2)我怎么知道当前工作路径?
答:如果你自己设置的,你当然自己清楚;否则......不管怎样都能用命令 ?SYS(5)+SYS(2003) 看到
(3)我想把C:\MyFile\VfpTest文件夹设为工作路径,怎么做?
答:Tools菜单中选择Options(见上文);或者用命令 SET DEFAULT TO "C:\MyFile\VfpTest"
(4)我的菜单程序mymenu.mpr文件放在工作路径D:\MYPRJ下面的MENU文件夹中,我用DO mymenu.mpr 它说找不到,原因是什么?该怎么办?
答:原因是DO mymenu.mpr没给路径,VFP在D:\MYPRJ中找不到,它不会主动在下级文件夹MENU中找。
解决办法:<1>把D:\MYPRJ\MENU设置为工作路径 然后就能DO mymenu.mpr &&严重不推荐
<2>DO D:\MYPRJ\MENU\mymenu.mpr &&绝对路径形式,严重不推荐
<3>DO MENU\mymenu.mpr &&相对路径形式,推荐使用
这个说明一下:文件名前面有文件夹,但不是完整路径,所以VFP仍旧到工作路径下寻找,不过这回先找MENU文件夹再到里面找文件。
<4> &&暂空,系列二补充
<5> &&暂空,系列二补充
系列二 内容预告 3.文件应该保存在哪里?
4.VFP怎么找文件?
5.相对路径还是绝对路径?
用老狐狸搞开发(哪怕仅仅是学习阶段),往往生成一大堆文件(并且可能需要其它的许多文件,比如图片啊、资源啊、头文件啊等等),这就涉及到这些文件的保存位置的问题。初学者常常遇到找不到文件的事情,我明明做了一个form1,也保存了,文件名是form1.scx,可是我DO FORM form1,竟然说找不到文件;更有甚者,说:我保存了表,但退出VFP后,我不知道表文件哪里去了?老鸟们会觉得可笑,不过当初俺也是经常遇到这样的情况。今天不妨谈谈。
先举个例子。比如你的盘上确实有个表tb1.dbf(假设表tb1.dbf保存在E:\123文件夹中,这个假设在本贴后面仍然有效),当你 Use tb1.dbf 时,VFP却毫不客气弹出对话框“找不到tb1.dbf”。这个“找不到”对话框给我们一些提示,一是你一定使用了这样的命令,该命令要使用一个盘上的文件(比如DO个prg、USE个表);二是VFP去寻找过你要用的文件,只是没找到。为什么找不到,明明有嘛?你这个老狐狸在哪儿找文件的?是不是没有到E:\123文件夹中找?
这就要求我们应该了解VFP寻找文件遵循的规则。那些使用文件的命令在语法上允许文件名带有完整路径(绝对路径),因此如果给出文件完整路径并且文件确实在那里,那么这个“找不到”对话框永远都不会出现。使用 Use E:\123\tb1.dbf 没问题,它直接指明了VFP到E:\123文件夹中找个叫tb1.dbf的文件,这当然OK。看来照猫画虎,如果我有个xxx.scx在F:\test\1文件夹中,那么运行这个表单就用 DO FORM F:\test\1\xxx.scx ,对极了。
不过、不过,不要以为这就一切OK了,那些命令同样允许文件名以相对路径的形式出现(后面将会谈到事实上我们应该采用相对路径),看看 Use tb1.dbf ,仅仅出现文件名(其实隐含着相对路径,就是当前工作路径),换句话说,VFP要到当前的工作路径下去寻找tb1.dbf,那么工作路径是什么?
1.VFP的工作路径(以下提到的工作路径、工作目录、工作文件夹3个概念相同,好比土豆、马铃薯、洋芋)
通俗地讲,工作路径就是一个文件夹(早期称为目录),VFP把生成的文件默认存放到这个文件夹(除非你在保存时指定了其它文件夹),并且当VFP要使用文件时(特别是以相对路径形式写出的命令),也在这个文件夹中找(这个说法不全面,后面补充)。所以工作路径很、十分、非常、very重要,使用VFP时,你应该时刻清楚目前的工作路径是什么。
不管372十1,命令窗口中执行命令 ?SYS(5)+SYS(2003) 总能显示出当前工作路径是什么。假如你执行了该命令,并且假设在主窗口中显示D:\MYPRJ,那说明当前工作路径是D盘的MYPRJ文件夹,这时执行 Use tb1.dbf ,VFP就会在D:\MYPRJ中寻找tb1.dbf。于是,讨厌的“找不到”对话框就来了。
说到这里,你应该有一些想法:“嗯,如果我的表tb1.dbf就保存在D:\MYPRJ中;或者要是工作路径就是E:\123,那么执行 Use tb1.dbf 应该没问题”。Very Good 这样的想法很正确。
这包含两个方面的问题,一是保存文件时应该放到哪里的问题,二是更改工作路径的问题。
这里我们继续谈工作路径。
当你安装VFP时,如果一路“确定”、“OK”、“同意”......(傻瓜式安装),一般的安装于系统盘的Program Files文件夹下的Microsoft Visual FoxPro 9文件夹。这里假设系统盘是C,则完整的安装路径是C:\Program Files\Microsoft Visual FoxPro 9\。按常规方式启动VFP(开始-程序-......),并且没有做过工作路径的更改(怎么改后面说),VFP有个默认的工作路径,就是"我的文档"下面自动建一个Visual FoxPro Projects的文件夹。换句话说,你用VFP生成的项目、表、表单等等,统统往这里存放。你可以用?SYS(5)+SYS(2003)在命令窗口中执行一下看,或者Tools菜单中选择Options,弹出对话框中找到File Locations页面,里面有个Default Directory项,选中它单击Modify按钮,可以看到新弹出的窗口中有灰色的路径,正是"我的文档"下面的Visual FoxPro Projects文件夹。这是个改进,早期版本的默认工作路径就是安装路径,那是比较糟糕的,因为安装路径下面有许多VFP的系统文件,如果直接使用这个工作路径,你自己生成的一大堆文件和这些已有文件混在一起,会很麻烦。9版本的这个改进还算不错,不过,嘿嘿,9版本很容易重犯老毛病(后面说)。
现在,你生成任何文件,如果没有在保存对话框中改变文件夹,或者使用命令生成文件,并且命令中文件名都不带路径,那么都会保存到"我的文档"下面的Visual FoxPro Projects文件夹中,那么你DO个FORM、USE个表,VFP会在这个文件夹中找东西,呵呵,都在,那没问题。可问题还是有,试想你在学习阶段今天建个项目、明天又建另一个项目,所有文件都在一起,岂不乱套。所以我们常常一个项目一个文件夹,各自分开,并且不一定非要在Visual FoxPro Projects文件夹中。这就涉及到更改工作路径。
(等等,我刚开始学习不久,还不清楚你说的项目为何物,也要象你说的,得考虑文件保存位置,还有什么工作路径吗?
是的,应该考虑。比如你才开始学习建表建库,必然要生成文件,如果不考虑路径,今天完成实验1,建一个商品库,明天完成实验2,建一个图书资料库,这些文件默认全都放到同一个工作路径下,混杂在一起,是很麻烦的。而且往往初学时喜欢用VFP给的默认文件名table1啊table2啊的,很可能今天建的table1覆盖了昨天建的table1,昨天的实验成果就玩完了。好的方式是针对不同的实验,建不同的文件夹,进行每一个实验时,先把对应的文件夹设置为工作文件夹。)
2.更改工作路径
先说一个不用做任何设置而改变工作路径的懒办法(该办法适用于你没有对工作路径进行过更改,包括使用菜单方式、命令方式以及配置文件的方式更改),不用常规方式启动VFP,直接到保存有VFP文件(dbf啊、prg啊、scx啊、mnu啊等等)的文件夹,双击某个文件,VFP启动并打开该文件,这时工作路径就是该文件夹。比如直接打开E:\123文件夹,双击tb1.dbf,这时工作路径就是E:\123。(特别提醒,不推荐双击dbf文件,原因不在本贴涉及范围,故不讨论,一般去双击项目文件prj)
本段小结:在没有使用菜单方式、命令方式以及配置文件的方式更改工作路径时,从哪个文件夹双击VFP的文件,工作目录就是哪个文件夹。
这个特性可以解释下面的例子:
我没更改过工作路径,我建了一个表单xxxx.scx,保存时我特意在保存对话框中换了一个文件夹(比如D:\myscx),接着在命令窗口执行DO FORM xxxx.scx ,系统说找不到。我关闭VFP,直接打开D:\myscx文件夹,双击xxxx.scx文件,VFP启动并出现表单设计器,这时执行DO FORM xxxx.scx就可以。
下面来说通过设置改变工作路径,其实上面已经说到了3种方法,先看菜单方式,就是Tools菜单中选择Options,弹出对话框中找到File Locations页面,里面有个Default Directory项,选中它单击Modify按钮,新弹出的窗口中选中Use Default Directory,这时可以直接输入路径或者单击3个小点按钮选择某个文件夹,然后确定。接下来你将面临两种选择,一是直接确定,另一个是先Set As Default(设为默认)再确定。第一种选择是短命的,一旦退出VFP,再启动,你的设置就白费了。第二种长命百岁,任何时候启动VFP,工作路径都是那个设置好的路径,除非你又改过。
这里顺便说说刚才提到的老毛病,那就是当你通过菜单又把Use Default Directory改为不使用,并且先Set As Default再确定。看似回到了刚安装时候的状态,不过这时退出再次启动,默认工作路径就成了安装路径了。
再看命令方式,习惯上使用SET DEFAULT TO <路径> 命令,当然还有些命令也会改变工作路径,但不推荐。这种命令更改的方式等效于菜单方式下的短命设置,只要退出VFP,这个设置就玩完了。
最后说说配置文件,你可以自行建立一个文本文件,命名为config.fpw,文件中可以来一句: DEFAULT=<路径>,并把它保存到VFP的安装路径下,那么VFP正常启动时就会把你写的路径设置为工作路径。(配置文件绝对是个好东东,很有用,不过下文不再出现它,因为和本贴涉及的路径内容关系不算特别铁)
不管怎样,现在你应该知道工作路径的概念——VFP工作时使用的一个文件夹,你可以把自己的文件夹设置为工作路径,VFP把生成的文件默认存放到这个文件夹,并且当VFP要使用文件时,也在这个文件夹中找(除非你给出了文件的绝对路径)。这样,你能回答下列常见问题:
(1)我用命令Create tb2生成表文件tb2.dbf,请问我的这个表文件保存到哪里去了?
答:当然保存在工作路径下面(没给路径、直接表名)
(2)我怎么知道当前工作路径?
答:如果你自己设置的,你当然自己清楚;否则......不管怎样都能用命令 ?SYS(5)+SYS(2003) 看到
(3)我想把C:\MyFile\VfpTest文件夹设为工作路径,怎么做?
答:Tools菜单中选择Options(见上文);或者用命令 SET DEFAULT TO "C:\MyFile\VfpTest"
(4)我的菜单程序mymenu.mpr文件放在工作路径D:\MYPRJ下面的MENU文件夹中,我用DO mymenu.mpr 它说找不到,原因是什么?该怎么办?
答:原因是DO mymenu.mpr没给路径,VFP在D:\MYPRJ中找不到,它不会主动在下级文件夹MENU中找。
解决办法:<1>把D:\MYPRJ\MENU设置为工作路径 然后就能DO mymenu.mpr &&严重不推荐
<2>DO D:\MYPRJ\MENU\mymenu.mpr &&绝对路径形式,严重不推荐
<3>DO MENU\mymenu.mpr &&相对路径形式,推荐使用
这个说明一下:文件名前面有文件夹,但不是完整路径,所以VFP仍旧到工作路径下寻找,不过这回先找MENU文件夹再到里面找文件。
<4> &&暂空,系列二补充
<5> &&暂空,系列二补充
系列二 内容预告 3.文件应该保存在哪里?
4.VFP怎么找文件?
5.相对路径还是绝对路径?