NetBox 2.7 使用手册

问题:为什么使用 mappath 映射的文件名编译后不能创建?

通常,asp 程序习惯于使用 Server.MapPath 来映射一个与 asp 相同目录的文件名,然后再直接访问。例如下面的代码:

Set file = CreateObject("NetBox.File")
file.Create Server.MapPath("temp.txt")
......

从代码中可以知道,作者是希望在当前目录创建一个 temp.txt 的文件。至于这么做的原因,主要是因为 asp 本身并不知道自己运行在哪个目录,或者是因为权限的原因。

这样的代码在未编译的时候是能够正常运行的,原因是在没有编译的时候,所有的 asp 都是存放在系统磁盘上面,而同时,其所在的目录也为实际系统目录,故经过映射,创建的文件也能够正确定位。

而经过编译以后,asp 文件就不再出现在系统磁盘上面,而与之对应的目录也是不存在的,此时再使用 Server.MapPath 映射得到的文件名所包含的目录也将是虚拟的,使用这样的文件名创建文件,其结果将是程序出错。

解决方法

对于只是临时使用的文件,可以简单将 Server.mappath 更换成为 netbox.mappath,这样,临时文件将创建在应用程序相同的目录。

对于需要永久存放的文件,一般的建议是在应用程序目录下面创建一个子目录,将文件全部存放在那个目录中。创建目录的操作可以放在 main.box 中,在初始化程序中完成。而如果这个目录中的文件还需要直接使用浏览器访问的话,可以使用 AddFolder 将此目录添加在 Web 服务器的虚拟主机上面即可。

参见

HttpServer
HttpServerHost
NetBox


版权所有: 2003- 网络盒子