An excerpt from one asp page we use is below. It reads the files in a folder into an array and then builds them into a table of links. You could extend it to sub directories with a bit of work.
<% Response.Buffer=True%>
<%Response.Expires=0%>
<%
' By: Blaine Wheeler
' October 8, 2002
' DCS SEMS Operations
' Purpose: Display Any and all technical docs from the \techdocs folder
'
' Modification History:
' 10/15/02 added file mod date to display
' 10/30/02 converted to a record set and added sorting ability.
' *******************************
' Global Variables and Objects
' *******************************
Set oFso = Server.CreateObject("Scripting.FileSystemObject"

Dim rs
' Folder, must be through a mapped drive on IIS server
CONST strFolder = "i:\techdocs"
' Send the string folder path to the FindIt function and assign the returned data to the object rs
Set rs = FindIt (strFolder)
' Sort the returned data
If Request.QueryString("sortBy"

<> "" Then
rs.Sort = Request.QueryString("sortBy"

Else
rs.Sort = Request.QueryString("Base"

End if
'***********************************************
Function Findit (strFolder)
' Loop through the files building the record set
Dim fil, filenames, rs, oFolder
Set rs = Server.CreateObject("ADODB.Recordset"
Set oFolder = oFso.GetFolder(strFolder)
Set filenames = oFolder.Files
Const adDate = 7
Const adVarChar = 200
' Make the RS
Set rs = Server.CreateObject("ADODB.Recordset"

rs.Fields.Append "FileName" , adVarChar , 200
rs.Fields.Append "Base" , adVarChar, 200
rs.Fields.Append "Created" , adDate
rs.Fields.Append "LastMod" , adDate
rs.Open
For each fil in filenames
rs.AddNew
rs("FileName"

= oFso.GetBaseName (fil) & "." & oFso.GetExtensionName(fil)
rs("Base"

= oFso.GetBaseName (fil)
rs("Created"

= FormatDateTime (fil.DateCreated , 2)
rs("LastMod"

= FormatDateTime (fil.DateLastModified , 2)
rs.Update
Next
rs.MoveFirst
Set FindIt = rs
End Function
Sub Die
If IsObject (oFso) Then Set oFso = Nothing
End Sub
' *******************************
' Subs and Functions
' *******************************
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
' We have the page title and style sheet path here
</HEAD>
<BODY>
Revised: October 8, 2002
<br>
<h4>This page displays Hardware and maintenance bulletins as well as instructions from SEMS Operations.</h4>
<table>
<tr>
<td><a href="TechDocs.asp?sortBy=Base" title="Sort by document name"><strong>Name</strong></a></td>
<td><a href="TechDocs.asp?sortBy=Created DESC" title="Sort by date created"><strong>Created</strong></a></td>
<td><a href="TechDocs.asp?sortBy=LastMod DESC" title="Sort by last modified date"><strong>Last Modified</strong></a></td>
</tr>
<%Do While Not rs.EOF%>
<tr>
<td class="tite"><a href="/
target="Bob"><%=rs("Base"

%></a></td>
<td class="tite"><%=rs("Created"

%></td>
<td class="tite"><%=rs("LastMod"

%></td>
</tr>
<%rs.MoveNext%>
<%Loop%>
</table>
</body>
</html>
<%
Die
Response.End
%>