ASP Directory Listing
Try the demo or view the source code.This example shows how to read a directory structure in ASP. The demo lists the contents of a few directories located on this site, including any subdirectories and their contents, along with some information on file sizes and last modified dates.
ASP provides access to files on the host server via the
FileSystemObject.
It is a generic object that can be used to
access existing files and folders or to create new ones.
It also provides information on drives, paths and special file types but the focus for this example is on file and folder objects.
File access permissions will apply to the script execution, so the user account which it runs under (such as an anonymous ID set up for web users) must have proper permissions to the files and directories accessed.
Other access permissions may be applied as well, such on Microsoft IIS web servers. Check your system documentation.
The Folder Object
To access a folder, you first create a FileSystemObject
then
use the GetFolder()
method specifying the physical path of that
folder.
<% set fs = CreateObject("Scripting.FileSystemObject") set folder = fs.GetFolder("C:\temp") %>
To find the path of a file on the local web site, the built-in
Server.MapPath()
function can be used to translate a URL to a
physical path.
<% path = Server.MapPath("/about/") %>
Which might return "C:\Inetpub\wwwroot\about\" for example. This value can
then be used in the GetFolder()
call.
Among the Folder
object's properties are the Files
and SubFolders
collections. These can be enumerated to list the
folder contents.
The demo script does just this, generating a display
for each file and subfolder along with some information on file size, last
modified date, etc. using a subroutine called
ListFolderContents().
<% sub ListFolderContents(path) dim fs, folder, file, item, url set fs = CreateObject("Scripting.FileSystemObject") set folder = fs.GetFolder(path) 'Display the target folder and info. Response.Write("<li><b>" & folder.Name & "</b> - " _ & folder.Files.Count & " files, ") if folder.SubFolders.Count > 0 then Response.Write(folder.SubFolders.Count & " directories, ") end if Response.Write(Round(folder.Size / 1024) & " KB total." _ & "</li>" & vbCrLf) Response.Write("<ul>" & vbCrLf) 'Display a list of sub folders. for each item in folder.SubFolders ListFolderContents(item.Path) next 'Display a list of files. for each item in folder.Files url = MapURL(item.path) Response.Write("<li><a href=""" & url & """>" _ & item.Name & "</a> - " _ & item.Size & " bytes, " _ & "last modified on " & item.DateLastModified & "." _ & "</li>" & vbCrLf) next Response.Write("</ul>" & vbCrLf) end sub %>
Note the recursive call the subroutine makes to itself for each subfolder. This allows all the entire file hierarchy to be traversed and displayed from whatever starting path is given.
In order to make hypertext links to each file, the physical file path has to
be mapped to a URL, just like Server.MapPath()
converted a URL to
a physical path. Unfortunately, there is no built-in function for this.
Instead, the MapURL()
function is defined to map a physical
file path back to a URL.
<% function MapURL(path) dim rootPath, url 'Convert a physical file path to a URL for hypertext links. rootPath = Server.MapPath("/") url = Right(path, Len(path) - Len(rootPath)) MapURL = Replace(url, "\", "/") end function %>
It simply takes the physical path of the web site root directory and strips it from the given path. Then any backslash characters are replaced with forward slashes.