在FoxBASE中使用PRG文件的限制

Author: 张建勇 Date: 1995-05-12

        在一次程序运行中拷贝数据库时,出现磁盘满错误。笔者就将软盘中的所有文件拷贝到D盘一个隐含目录下,并给了一个超长长度(为欺骗PCTOOLS,把子目录长度由0改为大于磁盘空间的一个数值,使PCTOOLS不能发现该子目录)名为“JY.Z”的子目录中,再运行程序时,由主程序HS.PRG调用第一个子程序pubdate.prg,pubdate.prg返回时出现如下错误信息:
        file does not exist
        RETURN
        ^
        called from - D:pubdate.prg
        pubdate.prg不能返回,再运行仍然是此错误,调试程序无法进行,就想方设法查找故障原因。
        首先怀疑是因为软盘满,中止拷贝而留下一个错误信息造成。笔者到A盘执行程序,pubdate.prg能返回。
        其次,怀疑是隐含子目录引起,于是取消了子目录隐含属性,但故障依然。
        再次,笔者怀疑是因为为欺骗PCTOOLS给子目录一个超长长度所致,笔者又把其改为正常的子目录,故障依旧。
        这种错误实在难以理解,笔者就把所有文件拷贝到一个名叫SWAP的子目录中,再运行程序,程序能正常运行。忽然想到会不会是子目录名的问题,在SWAP子目录可以运行而在JY.Z子目录不正常,它们的差别是,不能正常运行的子目录下多一个扩展名“.Z”,是不是由此引起呢?试着把JY.Z改名为JY结果程序能返回上级程序,故障排除。
        原来出现以上错误的原因是:在有扩展名的子目录下运行PRG文件时,从被调用模块返回时,由于不能正确保存程序执行路径,因此出现找不到返回文件的错误。笔者又做了几个类似试验,证实了以上结论。
        由此说明FoxBASE在运行PRG文件时,prg文件不能放在有扩展名的子目录中。
        笔者所用FoxBASE版本是2.1,操作系统PC DOS3.30,386兼容机。
        (张建勇)