列出 ASP 经典中的最新文件
List most recent files in ASP Classic
我正在重新设计我们部门的网站,我们的IT部门不支持内网开发。服务器 运行s ASP Classic 并且能够 运行 VB 脚本和 Javascript 在一定程度上(有些工作其他人不工作)。
所以这是我的问题:
我修改了从 http://www.brainjar.com/asp/dirlist/ 获得的一个简单代码
列出包括子目录在内的目录中的所有 PDF 文件,但我不确定如何对其进行排序。
截至目前,它会按其读取的每个文件夹的字母顺序对其进行排序。我希望它按 item.DateLastModified 属性 对每个子目录的每个文件进行排序我不知道这是否可能。
我想我需要将项目存储在一个数组中,然后对数组进行排序并打印数据,但我不知道该怎么做,自从我参加编程课程以来已经有 10 年了。
如有任何帮助,我们将不胜感激!
我目前使用的代码:
====>
<% sub ListFolderContents(path)
dim fs, folder, file, item, url
set fs = CreateObject("Scripting.FileSystemObject")
set folder = fs.GetFolder(path)
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)
if item.type = "PDF File" then
Response.Write("<dt><a href=""" & url & """>" & item.Name & "</a>" _
& vbCrLf)
end if
next
Response.Write("</dt>" & vbCrLf)
end sub
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 %>
嗯,今天是你的幸运日!我碰巧有大约 10 年前为个人使用而编写的旧代码,因此只需稍作调整,它就可以几乎完美地适合您的情况。关键是使用断开连接的记录集来保存所有数据,然后按上次修改日期排序。通过递归,爬行本身类似于您已经拥有的。请注意,无需在每次迭代中创建新的文件夹实例 - 这是资源浪费,因为您已经在循环中拥有文件夹对象。
无论如何,这里是:
Const adVarChar = 200
Const adInteger = 3
Const adDate = 7
Dim objFSO, oFolder, objRS
Sub ExtractAllFiles(oFolder)
Dim oSubFolder, oFile
'recurse all sub folders
For Each oSubFolder In oFolder.SubFolders
Call ExtractAllFiles(oSubFolder)
Next
'loop through all the files found, add to the recordset
For Each oFile in oFolder.Files
objRS.AddNew
objRS.Fields("Name").Value = oFile.Name
objRS.Fields("Url").Value = MapURL(oFile.Path)
objRS.Fields("Type") = oFile.Type
objRS.Fields("DateLastModified").Value = oFile.DateLastModified
Next
End Sub
Sub ListFolderContents(sPath, sTypeToShow)
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set oFolder = objFSO.GetFolder(sPath)
'create a disconnected recordset
Set objRS = Server.CreateObject("ADODB.Recordset")
'append proper fields
objRS.Fields.Append "Name", adVarChar, 255
objRS.Fields.Append "Url", adVarChar, 255
objRS.Fields.Append "Type", adVarChar, 255
objRS.Fields.Append "DateLastModified", adDate
objRS.Open
'extract all files in given path:
Call ExtractAllFiles(oFolder)
'sort and apply:
If Not(objRS.EOF) Then
objRS.Sort = "DateLastModified DESC"
objRS.MoveFirst
End If
'loop through all the records:
Do Until objRS.EOF
If (Len(sTypeToShow)=0) Or (LCase(sTypeToShow)=LCase(objRS("Type"))) Then
Response.Write("<dt><a href=""" & objRS("Url") & """>" & objRS("Name") & "</a> (Type: " & objRS("Type") & ", Last modified: " & objRS("DateLastModified") & ")</dt>" _
& vbCrLf)
End If
objRS.MoveNext()
Loop
'clean up resources
Set oFolder = Nothing
Set objFSO = Nothing
objRS.Close
Set objRS = Nothing
End Sub
要在您的代码中使用它,请在 HTML 正文中包含以下行:
<% Call ListFolderContents(Server.MapPath("."), "PDF File") %>
您当然可以使用不同的路径并更改显示以仅显示您需要的内容。
我正在重新设计我们部门的网站,我们的IT部门不支持内网开发。服务器 运行s ASP Classic 并且能够 运行 VB 脚本和 Javascript 在一定程度上(有些工作其他人不工作)。
所以这是我的问题:
我修改了从 http://www.brainjar.com/asp/dirlist/ 获得的一个简单代码 列出包括子目录在内的目录中的所有 PDF 文件,但我不确定如何对其进行排序。
截至目前,它会按其读取的每个文件夹的字母顺序对其进行排序。我希望它按 item.DateLastModified 属性 对每个子目录的每个文件进行排序我不知道这是否可能。
我想我需要将项目存储在一个数组中,然后对数组进行排序并打印数据,但我不知道该怎么做,自从我参加编程课程以来已经有 10 年了。
如有任何帮助,我们将不胜感激!
我目前使用的代码:
====>
<% sub ListFolderContents(path)
dim fs, folder, file, item, url
set fs = CreateObject("Scripting.FileSystemObject")
set folder = fs.GetFolder(path)
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)
if item.type = "PDF File" then
Response.Write("<dt><a href=""" & url & """>" & item.Name & "</a>" _
& vbCrLf)
end if
next
Response.Write("</dt>" & vbCrLf)
end sub
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 %>
嗯,今天是你的幸运日!我碰巧有大约 10 年前为个人使用而编写的旧代码,因此只需稍作调整,它就可以几乎完美地适合您的情况。关键是使用断开连接的记录集来保存所有数据,然后按上次修改日期排序。通过递归,爬行本身类似于您已经拥有的。请注意,无需在每次迭代中创建新的文件夹实例 - 这是资源浪费,因为您已经在循环中拥有文件夹对象。
无论如何,这里是:
Const adVarChar = 200
Const adInteger = 3
Const adDate = 7
Dim objFSO, oFolder, objRS
Sub ExtractAllFiles(oFolder)
Dim oSubFolder, oFile
'recurse all sub folders
For Each oSubFolder In oFolder.SubFolders
Call ExtractAllFiles(oSubFolder)
Next
'loop through all the files found, add to the recordset
For Each oFile in oFolder.Files
objRS.AddNew
objRS.Fields("Name").Value = oFile.Name
objRS.Fields("Url").Value = MapURL(oFile.Path)
objRS.Fields("Type") = oFile.Type
objRS.Fields("DateLastModified").Value = oFile.DateLastModified
Next
End Sub
Sub ListFolderContents(sPath, sTypeToShow)
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set oFolder = objFSO.GetFolder(sPath)
'create a disconnected recordset
Set objRS = Server.CreateObject("ADODB.Recordset")
'append proper fields
objRS.Fields.Append "Name", adVarChar, 255
objRS.Fields.Append "Url", adVarChar, 255
objRS.Fields.Append "Type", adVarChar, 255
objRS.Fields.Append "DateLastModified", adDate
objRS.Open
'extract all files in given path:
Call ExtractAllFiles(oFolder)
'sort and apply:
If Not(objRS.EOF) Then
objRS.Sort = "DateLastModified DESC"
objRS.MoveFirst
End If
'loop through all the records:
Do Until objRS.EOF
If (Len(sTypeToShow)=0) Or (LCase(sTypeToShow)=LCase(objRS("Type"))) Then
Response.Write("<dt><a href=""" & objRS("Url") & """>" & objRS("Name") & "</a> (Type: " & objRS("Type") & ", Last modified: " & objRS("DateLastModified") & ")</dt>" _
& vbCrLf)
End If
objRS.MoveNext()
Loop
'clean up resources
Set oFolder = Nothing
Set objFSO = Nothing
objRS.Close
Set objRS = Nothing
End Sub
要在您的代码中使用它,请在 HTML 正文中包含以下行:
<% Call ListFolderContents(Server.MapPath("."), "PDF File") %>
您当然可以使用不同的路径并更改显示以仅显示您需要的内容。