【问题标题】:List most recent files in ASP Classic列出 ASP Classic 中的最新文件
【发布时间】:2015-05-05 06:39:47
【问题描述】:

我正在重新设计我们部门的网站,我们的 IT 部门不支持 Intranet 开发。该服务器运行 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 %>

原文在http://www.brainjar.com/asp/dirlist/

【问题讨论】:

    标签: sorting vbscript asp-classic file-management


    【解决方案1】:

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

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

    【讨论】:

    • 就是这样,非常感谢!感谢您的帮助,我不确定是否有人会遇到这种语言不再使用的情况!
    • 干杯,你很幸运,我想我在经典 ASP 还是全新的时候就开始编程了。 :D
    猜你喜欢
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多