网络编程
位置:首页>> 网络编程>> Asp编程>> 使用ASP遍历并列表显示目录文件

使用ASP遍历并列表显示目录文件

作者:Mike Hall  发布时间:2009-11-08 18:32:00 

标签:目录,文件,asp

本文将结合实例给大家演示如何使用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 %>

它的原理是,首先获取系统根目录的物理路径;然后去除所有文件物理路径中与根目录相同的部分;最后将右斜杠替换成左斜杠即可。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com