使用ASP遍历并列表显示目录文件
作者:Mike Hall 发布时间:2009-11-08 18:32:00
本文将结合实例给大家演示如何使用ASP读取一个目录结构(及包含的文件信息)。演示页面中遍历显示了代码吾爱站点上若干目录文件夹——其中包含它们的所有子目录,该子目录下的文件以及文件常用信息(文件大小和最后修改时间)。
ASP提供给我们通过FSO组件(FileSystemObject)对服务器上的文件进行存取的功能。我们可以FSO组件来存取已存在的文件和文件夹,或者通过它来创建一个新文件和文件夹。
FSO组件同时提供给我们获取服务器硬盘、路径和特定文件类型数据信息的功能;但在本文中,我们将主要使用FSO组件的文件(File)对象和文件夹(Folder)对象。
安全笔记文件信息的存取需要服务器上脚本执行权限的支持,所以,如果普通用户(比如一个匿名ID的互联网访客)想要存取目录和文件信息,服务器必须给他们分配合适的权限。与此同时,你可能需要配置其他的目录存取权限,比如Microsoft IIS服务器上的配置。请咨询你的主机提供商。译者注:中国的虚拟主机用户不必担心这个问题,因为主机提供商在你建站之初就已帮你调配好了各种权限;包括这里提到的匿名用户对某个文件夹的脚本执行权限。
FSO的文件夹对象(Folder Object)
要实现对文件夹的信息存取,你需要首先创建一个FSO组件的实例对象(第一行);然后使用GetFolder()方法,并指定目录的物理路径作为参数赋值给它(第二行):
<% set fs = CreateObject("Scripting.FileSystemObject")
set folder = fs.GetFolder("C:\temp") %>
为了获取指定目录在主机上的物理路径,我们通常是使用ASP的内建对象Server.MapPath()方法来将一个目录或文件的相对路径转换成物理路径。也就是说,Server.MapPath() 可以将一个URL路径转换成一个物理路径:
<% path = Server.MapPath("/about/") %>
例如,上面这行语句的path将返回"C:\Inetpub\wwwroot\about\"。可见,这个值可以被用于GetFolder()的参数调用之中。
在Folder对象的众多属性当中,包含两个主要的属性集合:Files 集合(文件集合,用于处理文件)和SubFolders 集合(子目录集合,用于处理子目录)。我们可以通过这两个属性集合遍历并列表输出一个文件夹所包含的内容。
本文的演示中所利用的方法正是上面这一点:通过这两个属性集合来显示每个文件和子文件夹;其中文件夹还包含文件大小和最后的修改时间等。
我们这里定义了一个子程序ListFolderContents()来实现这一功能:
<% sub ListFolderContents(path)
dim fs, folder, file, item, url
set fs = CreateObject("Scripting.FileSystemObject")
set folder = fs.GetFolder(path)
'显示目标文件夹和相关信息
Response.Write("
" _
?< & folder.Name> & folder.Files.Count & " 个文件,")
if folder.SubFolders.Count > 0 then
Response.Write(folder.SubFolders.Count & " 个子文件夹,")
end if
Response.Write(Round(folder.Size / 1024) & " KB 大小." _
& "" & vbCrLf)
Response.Write("
" & vbCrLf)
'显示所有子文件夹列表
for each item in folder.SubFolders
ListFolderContents(item.Path)
next
'显示所有文件列表
for each item in folder.Files
url = MapURL(item.path)
Response.Write("
? url href=""> & item.Name & " _
& "最后修改日期" & item.DateLastModified & "." _
& "" & vbCrLf)
next
Response.Write("
" & vbCrLf)
end sub %>
注意:由于我们使用的是递归算法,所以每个子目录的中间也会被列表显示出来。这就允许我们给定任意的目录文件名,程序会自动的遍历其下的每个文件夹和文件。
为了给每个文件添加一个超链接属性,这里我们还需要将文件的物理路径转换回URL路径——我们可以通过内建对象Server.MapPath()将URL路径转换为物理路径,但不幸的是:我们没有办法将此过程逆转,ASP并没有提供一个内建对象让我们将物理路径转换会URL。
所以,我们还需要定一个过程函数将物理路径转换回URL路径(超级链接):
<% function MapURL(path)
dim rootPath, url
'物理路径转换回URL路径(超级链接)
rootPath = Server.MapPath("/")
url = Right(path, Len(path) - Len(rootPath))
MapURL = Replace(url, "\", "/")
end function %>
它的原理是,首先获取系统根目录的物理路径;然后去除所有文件物理路径中与根目录相同的部分;最后将右斜杠替换成左斜杠即可。


猜你喜欢
- 最近接触到微服务框架go-zero,翻看了整个框架代码,发现结构清晰、代码简洁,所以决定阅读源码学习下,本次阅读的源码位于core/sync
- Python socket网络编程初学 python,前段时间买了两本书《python 编程从入门到实践》《Python 核心编程第三版》,
- 目录产生背景(已经有了存储过程,为什么还要使用自定义函数)发展历史构成使用方法适用范围注意事项疑问 内容产生背景(已经有了存储过程,为什么还
- 一、慢查询日志概念对于SQL和索引的优化问题,我们会使用explain去分析SQL语句。但是真正的企业级项目有成千上万条SQL,我们不可能从
- 前言:现在写爬虫,入门已经不是一件门槛很高的事情了,网上教程一大把,但很多爬虫新手在爬取数据的过程中依旧会遇到这样那样的问题。今天整理了部分
- 1. 开发1.1. 架构Gorm使用可链接的API,*gorm.DB是链的桥梁,对于每个链API,它将创建一个新的关系。db, err :=
- 从概念上讲,大多数关系数据库系统都是类似的:它们都由一组数据库组成,且每个数据库都包含一组表。但是,所有的系统都有自己的管理数据的方法, M
- 很多人对于CSS都是边干边学习,因为它不像C#之类的语言那么复杂,看起来似乎挺简单,然而正是这种对CSS的不完整的理解,导致了许多的CSS代
- 今天把博客的日历脚本又改了一改,就帖上了,以后找起来方便一点,同时也给需要的人带来方便,本来还想加点功能再帖上来,不过我看还是没必要了,帖的
- 很有趣的招聘方式和题目:以下是该次招聘前端开发工程师的聘题解答:小贤是一条可爱的小狗(Dog),它的叫声很好听(wow),每次看到主人的时候
- 前言:这个先来创建一个模块,名称为christmastree,在该模块中,首先定义一个全局变量,然后创建一个名称为fun_christmas
- 分析SQL执行带来的开销是优化SQL的重要手段。在MySQL数据库中,可以通过配置profiling参数来启用SQL剖析。该参数可以在全局和
- 本文实例讲述了Python通过PIL获取图片主要颜色并和颜色库进行对比的方法。分享给大家供大家参考。具体分析如下:这段代码主要用来从图片提取
- 首先总结的意义就是让杂乱无章变得更加井然有序,这样在使用的过程思路会更加清晰。数组使用方法注意点:变异方法和非变异方法。即变异方法使用会改变
- python中docx库的简介python-docx包,这是一个很强大的包,可以用来创建docx文档,包含段落、分页符、表格、图片、标题、样
- 目录配置连接池SetMaxOpenConns方法SetMaxIdleConns方法SetConnMaxLifetime方法SetConnMa
- 前言要在pandas.DataFrame中的任何位置检索或更改数据,可以使用at,iat,loc,iloc。位置的指定方法at,loc:行标
- 很多用ACCEE97开发过数据库的用户都有这种体会:要想在窗体中添加一个命令按钮实现打开通用对话框的功能真是很困难。因为ACCESS97本身
- mysql基础数据类型mysql常用数据类型概览![1036857-20170801181433755-146301178](D:\笔记\m
- go get 和 go install 的区别先看结论:go get: 对 go mod 项目,添加,更新,删除&nbs