sorting - 列出 ASP Classic 中的最新文件

标签 sorting vbscript asp-classic file-management

我正在重新设计我们部门的网站,我们的IT部门不支持内网开发。服务器运行 ASP Classic,并且能够在一定程度上运行 VB 脚本和 Javascript(有些功能可以使用,有些则不能)。

所以这是我的问题:

我修改了从 http://www.brainjar.com/asp/dirlist/ 获得的简单代码 列出目录中的所有 PDF 文件(包括子目录),但我不知道如何对其进行排序。

到目前为止,它按照它读取的每个文件夹的字母顺序对其进行排序。我希望它按 item.DateLastModified 属性对每个子目录的每个文件进行排序,我不知道这是否可能。

我想我需要将项目存储在数组中,然后对数组进行排序并打印数据,但我不知道如何做到这一点,自从我参加编程类(class)以来已经有 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 %>

原件位于http://www.brainjar.com/asp/dirlist/

最佳答案

好吧,今天是你的幸运日!我碰巧有大约 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") %>

您当然可以使用不同的路径并更改显示以仅显示您需要的内容。

关于sorting - 列出 ASP Classic 中的最新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30045856/

相关文章:

JQUERY slider 获取值

javascript - 根据值对二维数组进行排序

delphi - 在您的 delphi 应用程序中托管 WSH(VBScript、JavaScript)?

stored-procedures - 经典 ASP - ADO 执行传递参数的存储过程

VBScript FileSystemObject.Copyfolder 和 FileSystemObject.CreateFolder

sql-server - 如何使用 VBScript 从数据库复制到文本文件?

excel - 从实例打印 Excel 工作表时字体错误?

Java 字符串排序(但不是完全按字典顺序)

java - 我需要编写一个程序来打印一副洗过的牌和一副排序过的牌

python - 对我的数组中的随机数进行排序