Tweak to existing code-scanning folders for new files

Discussion in 'ASP General' started by Bryan, Aug 19, 2008.

  1. Bryan

    Bryan Guest

    Hello group.
    I have some code (given to me), but I don't know alot about ASP, so I was
    hoping someone here can help. Running on Win 2008 server.

    The code below will scan a folder and subfolder with a date/time input and
    return xml structure off all files that are newer than the supplied date/time.

    The problem is that the returned xml has path names like
    C:\folder\subfolder\filename.ext
    I would like it to be more like /folder/subfolder/filename.ext
    Also, the initial path gets returned in the xml "data", but I only want the
    sub folders below "data" to get scanned and info returned...
    Any help would be greatly appreciated.

    function indent(iTreeLevel)
    dim rv : rv = ""
    if iTreeLevel > 0 then
    for i = 1 to iTreeLevel
    rv = rv & " "
    next
    end if
    indent = rv
    end function

    '==========================================

    function newItemsCount(objFolder, dCutoffDate)
    dim rv : rv = 0
    dim sFileModified
    For Each objFile In objFolder.Files
    sFileModified = objFile.DateLastModified
    If (sFileModified > dCutoffDate) Then
    rv = rv + 1
    End If
    Next
    newItemsCount = rv
    end function

    '==========================================

    function newItemsSize(objFolder, dCutoffDate)
    dim rv : rv = 0
    dim sFileModified
    For Each objFile In objFolder.Files
    sFileModified = objFile.DateLastModified
    If (sFileModified > dCutoffDate) Then
    rv = rv + objFile.Size
    End If
    Next
    newItemsSize = rv
    end function

    '==========================================

    sub FolderListing(strPath, dCutoffDate, blnRecursive, iTreeLevel)

    Dim objFolder
    Set objFolder = objFSO.GetFolder(strPath)

    response.write(indent(iTreeLevel) & "<folder name=""" & objFolder.Name &
    """ newitems=""" & newItemsCount(objFolder, dCutoffDate) & """
    newitems_size=""" & newItemsSize(objFolder, dCutoffDate) & """>" & vbCrLf)

    For Each objFile In objFolder.Files
    sFileSize = objFile.Size
    sFileName = objFile.Name
    sFileType = objFile.Type
    sFileCreated = objFile.DateCreated
    sFileModified = objFile.DateLastModified
    If (sFileModified > dCutoffDate) Then
    response.write(indent(iTreeLevel) & " <file name=""" & sFileName & """
    size=""" & sFileSize & """ date=""" & sFileModified & """ url=""" & strPath &
    "\" & sFileName & """/>" & vbCrLf)
    End If
    Next

    If blnRecursive Then
    Dim objSubFolders
    Set objSubFolders = objFolder.SubFolders
    For Each objFolder in objSubFolders
    sFolderName = objFolder.Name
    sFolderPath = strPath & "\" & sFolderName
    FolderListing sFolderPath, dCutoffDate, blnRecursive, iTreeLevel+1
    Next
    End if

    response.write(indent(iTreeLevel) & "</folder>" & vbCrLf)

    end sub

    '=========================================================================================


    sDateTime = unescape(Request.QueryString)
    aDateTime = split(sDateTime, " ")
    sDate = aDateTime(0)
    sTime = aDateTime(1) & " " & aDateTime(2)
    dDate = DateValue(sDate)
    dTime = TimeValue(sTime)
    dDateTime = dDate + dTime



    Dim objFSO
    Set objFSO = Server.CreateObject("Scripting.FileSystemObject")


    %>



    <?xml version="1.0" encoding="utf-8"?>

    <newfiles fromdate="<%= dDate %>" datestr="<%= sDate %>" timestr="<%= sTime
    %>" resultdatetime="<%= dDateTime %>">

    <%
    FolderListing server.MapPath("data"), dDateTime, true, 0
    %>

    </newfiles>


    --
    Thanks!
    Bryan
    Bryan, Aug 19, 2008
    #1
    1. Advertising

  2. "Bryan" <> wrote in message
    news:...
    > Hello group.
    > I have some code (given to me), but I don't know alot about ASP, so I was
    > hoping someone here can help. Running on Win 2008 server.
    >
    > The code below will scan a folder and subfolder with a date/time input and
    > return xml structure off all files that are newer than the supplied

    date/time.
    >
    > The problem is that the returned xml has path names like
    > C:\folder\subfolder\filename.ext
    > I would like it to be more like /folder/subfolder/filename.ext
    > Also, the initial path gets returned in the xml "data", but I only want

    the
    > sub folders below "data" to get scanned and info returned...
    > Any help would be greatly appreciated.
    >
    > function indent(iTreeLevel)
    > dim rv : rv = ""
    > if iTreeLevel > 0 then
    > for i = 1 to iTreeLevel
    > rv = rv & " "
    > next
    > end if
    > indent = rv
    > end function
    >
    > '==========================================
    >
    > function newItemsCount(objFolder, dCutoffDate)
    > dim rv : rv = 0
    > dim sFileModified
    > For Each objFile In objFolder.Files
    > sFileModified = objFile.DateLastModified
    > If (sFileModified > dCutoffDate) Then
    > rv = rv + 1
    > End If
    > Next
    > newItemsCount = rv
    > end function
    >
    > '==========================================
    >
    > function newItemsSize(objFolder, dCutoffDate)
    > dim rv : rv = 0
    > dim sFileModified
    > For Each objFile In objFolder.Files
    > sFileModified = objFile.DateLastModified
    > If (sFileModified > dCutoffDate) Then
    > rv = rv + objFile.Size
    > End If
    > Next
    > newItemsSize = rv
    > end function
    >
    > '==========================================
    >
    > sub FolderListing(strPath, dCutoffDate, blnRecursive, iTreeLevel)
    >
    > Dim objFolder
    > Set objFolder = objFSO.GetFolder(strPath)
    >
    > response.write(indent(iTreeLevel) & "<folder name=""" & objFolder.Name &
    > """ newitems=""" & newItemsCount(objFolder, dCutoffDate) & """
    > newitems_size=""" & newItemsSize(objFolder, dCutoffDate) & """>" & vbCrLf)
    >
    > For Each objFile In objFolder.Files
    > sFileSize = objFile.Size
    > sFileName = objFile.Name
    > sFileType = objFile.Type
    > sFileCreated = objFile.DateCreated
    > sFileModified = objFile.DateLastModified
    > If (sFileModified > dCutoffDate) Then
    > response.write(indent(iTreeLevel) & " <file name=""" & sFileName & """
    > size=""" & sFileSize & """ date=""" & sFileModified & """ url=""" &

    strPath &
    > "\" & sFileName & """/>" & vbCrLf)
    > End If
    > Next
    >
    > If blnRecursive Then
    > Dim objSubFolders
    > Set objSubFolders = objFolder.SubFolders
    > For Each objFolder in objSubFolders
    > sFolderName = objFolder.Name
    > sFolderPath = strPath & "\" & sFolderName
    > FolderListing sFolderPath, dCutoffDate, blnRecursive, iTreeLevel+1
    > Next
    > End if
    >
    > response.write(indent(iTreeLevel) & "</folder>" & vbCrLf)
    >
    > end sub
    >
    >

    '===========================================================================
    ==============
    >
    >
    > sDateTime = unescape(Request.QueryString)
    > aDateTime = split(sDateTime, " ")
    > sDate = aDateTime(0)
    > sTime = aDateTime(1) & " " & aDateTime(2)
    > dDate = DateValue(sDate)
    > dTime = TimeValue(sTime)
    > dDateTime = dDate + dTime
    >
    >
    >
    > Dim objFSO
    > Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
    >
    >
    > %>
    >
    >
    >
    > <?xml version="1.0" encoding="utf-8"?>
    >
    > <newfiles fromdate="<%= dDate %>" datestr="<%= sDate %>" timestr="<%=

    sTime
    > %>" resultdatetime="<%= dDateTime %>">
    >
    > <%
    > FolderListing server.MapPath("data"), dDateTime, true, 0
    > %>
    >
    > </newfiles>
    >
    >



    Could not bring myself to tweak that code. Here is an alternative ASP:-

    <%

    Dim gfso : Set gfso = Server.CreateObject("Scripting.FileSystemObject")
    Dim gdatCutOff : gdatCutOff = FromISO8601(Request.QueryString("cutoff"))

    Dim goXML : Set goXML = Server.CreateObject("MSXML2.DOMDocument.6.0")
    goXML.LoadXML "<newItems />"

    Dim gelemNewFiles : Set gelemNewFiles = goXML.documentElement

    gelemNewFiles.setAttribute "from", ToISO8601(gdatCutOff)

    Dim goDataFolder : Set goDataFolder = gfso.GetFolder(Server.MapPath("data"))

    GetFolderXML gelemNewFiles, goDataFolder, gdatCutOff

    DropElems gelemNewFiles, "folder[@name='data']/file"

    Response.ContentType = "text/xml"
    Response.CharSet = "UTF-8"
    goXML.Save Response

    Sub GetFolderXML(relemParent, roFolder, rdatCutOff)

    Dim oFolder
    Dim oFile
    Dim elemFolder
    Dim elemFile

    Set elemFolder = AddElem(relemParent, "folder", Null)
    elemFolder.setAttribute "name", roFolder.Name

    For Each oFolder In roFolder.SubFolders
    GetFolderXML elemFolder, oFolder, rdatCutOff
    Next

    For Each oFile In roFolder.Files
    If oFile.DateLastModified > rdatCutOff Then
    Set elemFile = AddElem(elemFolder, "file", Null)
    elemFile.setAttribute "name", oFile.Name
    elemFile.setAttribute "size", oFile.Size
    elemFile.setAttribute "lastModified", ToISO8601(oFile.DateLastModified)
    End If
    Next

    End Sub

    Sub DropElems(relem, rsXPath)

    Dim oNode
    Dim oList : Set oList = relem.SelectNodes(rsXPath)
    Dim lDummy : lDummy = oList.length 'Fill list
    For Each oNode in oList
    oNode.parentNode.removeChild oNode
    Next

    End Sub

    Function FromISO8601(s)
    'See http://www.merlyn.demon.co.uk/vb-date1.htm#DS
    ' Returns date in local time if timezone not present or GMT if timezone is
    present
    FromISO8601 = DateSerial(Mid(s,1,4), Mid(s,5,2), Mid(s,7,2))

    If Len(s) > 8 Then
    FromISO8601 = FromISO8601 + CDate(Mid(s,10,8))
    End If

    If Len(s) > 17 Then
    FromISO8601 = FromISO8601 - CInt(Mid(s,18,1) & "1") * CDate(Mid(s,19,5))
    End If

    End Function

    Function ToISO8601(rdat)
    'See http://www.merlyn.demon.co.uk/vb-date1.htm#Cymd

    Dim sYMD : sYMD = CStr((Year(rdat)*100 + Month(rdat) )*100 + Day(rdat))
    Dim sHMS : sHMS = Right((Hour(rdat)*100+Minute(rdat))*100+Second(rdat)+1e7,
    6)

    ToISO8601 = sYMD & "T" & Left(sHMS, 2) & ":" & Mid(sHMS, 3,2) & ":" &
    Right(sHMS, 2)

    End Function

    Function AddElem(roParent, rsName, rvntValue)
    Set AddElem = roParent.ownerDocument.createElement(rsName)
    roParent.appendChild AddElem
    If Not IsNull(rvntValue) Then AddElem.Text = rvntValue
    End Function
    %>


    Its not a good idea to attempt to build XML output using response writes.
    The code does not properly encode characters that have meaning in XML nor
    was the character encoding correct. Had any files contained a & or a
    character outside the base ASCII range the generated output would be
    corrupt. My code uses DOM to build the XML, it makes the code much more
    readable as well.

    Note that my code uses ISO8601 formating for the date values all the
    original code. Also it does not even attempt to place path info into the XML
    nor does it include counts or size totals. All of these pieces of info can
    be derived from the XML.

    I have included your request to drop files found in the data folder itself
    although I would have prefered that the data folder not have other files in
    it. (Caveat, the folder name 'data' is case sensitive).

    Call this page like this:-

    /root/listnewfiles.asp?cutoff=20080819T21:30:00

    What do you do with this XML once received?


    --
    Anthony Jones - MVP ASP/ASP.NET
    Anthony Jones, Aug 19, 2008
    #2
    1. Advertising

  3. Bryan

    Bryan Guest

    Anthony,
    Thanks for the sample code... I'll try it out..
    The code is used by another compiled program to download files from a web
    server. Basically all files that are newer than the cutoff date are returned
    in the xml, then another program downloads the files. I don't have any
    control over the other program, so the xml has to look/function like the
    existing xml to work.
    Thanks again!
    --
    Thanks!
    Bryan


    "Anthony Jones" wrote:

    > "Bryan" <> wrote in message
    > news:...
    > > Hello group.
    > > I have some code (given to me), but I don't know alot about ASP, so I was
    > > hoping someone here can help. Running on Win 2008 server.
    > >
    > > The code below will scan a folder and subfolder with a date/time input and
    > > return xml structure off all files that are newer than the supplied

    > date/time.
    > >
    > > The problem is that the returned xml has path names like
    > > C:\folder\subfolder\filename.ext
    > > I would like it to be more like /folder/subfolder/filename.ext
    > > Also, the initial path gets returned in the xml "data", but I only want

    > the
    > > sub folders below "data" to get scanned and info returned...
    > > Any help would be greatly appreciated.
    > >
    > > function indent(iTreeLevel)
    > > dim rv : rv = ""
    > > if iTreeLevel > 0 then
    > > for i = 1 to iTreeLevel
    > > rv = rv & " "
    > > next
    > > end if
    > > indent = rv
    > > end function
    > >
    > > '==========================================
    > >
    > > function newItemsCount(objFolder, dCutoffDate)
    > > dim rv : rv = 0
    > > dim sFileModified
    > > For Each objFile In objFolder.Files
    > > sFileModified = objFile.DateLastModified
    > > If (sFileModified > dCutoffDate) Then
    > > rv = rv + 1
    > > End If
    > > Next
    > > newItemsCount = rv
    > > end function
    > >
    > > '==========================================
    > >
    > > function newItemsSize(objFolder, dCutoffDate)
    > > dim rv : rv = 0
    > > dim sFileModified
    > > For Each objFile In objFolder.Files
    > > sFileModified = objFile.DateLastModified
    > > If (sFileModified > dCutoffDate) Then
    > > rv = rv + objFile.Size
    > > End If
    > > Next
    > > newItemsSize = rv
    > > end function
    > >
    > > '==========================================
    > >
    > > sub FolderListing(strPath, dCutoffDate, blnRecursive, iTreeLevel)
    > >
    > > Dim objFolder
    > > Set objFolder = objFSO.GetFolder(strPath)
    > >
    > > response.write(indent(iTreeLevel) & "<folder name=""" & objFolder.Name &
    > > """ newitems=""" & newItemsCount(objFolder, dCutoffDate) & """
    > > newitems_size=""" & newItemsSize(objFolder, dCutoffDate) & """>" & vbCrLf)
    > >
    > > For Each objFile In objFolder.Files
    > > sFileSize = objFile.Size
    > > sFileName = objFile.Name
    > > sFileType = objFile.Type
    > > sFileCreated = objFile.DateCreated
    > > sFileModified = objFile.DateLastModified
    > > If (sFileModified > dCutoffDate) Then
    > > response.write(indent(iTreeLevel) & " <file name=""" & sFileName & """
    > > size=""" & sFileSize & """ date=""" & sFileModified & """ url=""" &

    > strPath &
    > > "\" & sFileName & """/>" & vbCrLf)
    > > End If
    > > Next
    > >
    > > If blnRecursive Then
    > > Dim objSubFolders
    > > Set objSubFolders = objFolder.SubFolders
    > > For Each objFolder in objSubFolders
    > > sFolderName = objFolder.Name
    > > sFolderPath = strPath & "\" & sFolderName
    > > FolderListing sFolderPath, dCutoffDate, blnRecursive, iTreeLevel+1
    > > Next
    > > End if
    > >
    > > response.write(indent(iTreeLevel) & "</folder>" & vbCrLf)
    > >
    > > end sub
    > >
    > >

    > '===========================================================================
    > ==============
    > >
    > >
    > > sDateTime = unescape(Request.QueryString)
    > > aDateTime = split(sDateTime, " ")
    > > sDate = aDateTime(0)
    > > sTime = aDateTime(1) & " " & aDateTime(2)
    > > dDate = DateValue(sDate)
    > > dTime = TimeValue(sTime)
    > > dDateTime = dDate + dTime
    > >
    > >
    > >
    > > Dim objFSO
    > > Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
    > >
    > >
    > > %>
    > >
    > >
    > >
    > > <?xml version="1.0" encoding="utf-8"?>
    > >
    > > <newfiles fromdate="<%= dDate %>" datestr="<%= sDate %>" timestr="<%=

    > sTime
    > > %>" resultdatetime="<%= dDateTime %>">
    > >
    > > <%
    > > FolderListing server.MapPath("data"), dDateTime, true, 0
    > > %>
    > >
    > > </newfiles>
    > >
    > >

    >
    >
    > Could not bring myself to tweak that code. Here is an alternative ASP:-
    >
    > <%
    >
    > Dim gfso : Set gfso = Server.CreateObject("Scripting.FileSystemObject")
    > Dim gdatCutOff : gdatCutOff = FromISO8601(Request.QueryString("cutoff"))
    >
    > Dim goXML : Set goXML = Server.CreateObject("MSXML2.DOMDocument.6.0")
    > goXML.LoadXML "<newItems />"
    >
    > Dim gelemNewFiles : Set gelemNewFiles = goXML.documentElement
    >
    > gelemNewFiles.setAttribute "from", ToISO8601(gdatCutOff)
    >
    > Dim goDataFolder : Set goDataFolder = gfso.GetFolder(Server.MapPath("data"))
    >
    > GetFolderXML gelemNewFiles, goDataFolder, gdatCutOff
    >
    > DropElems gelemNewFiles, "folder[@name='data']/file"
    >
    > Response.ContentType = "text/xml"
    > Response.CharSet = "UTF-8"
    > goXML.Save Response
    >
    > Sub GetFolderXML(relemParent, roFolder, rdatCutOff)
    >
    > Dim oFolder
    > Dim oFile
    > Dim elemFolder
    > Dim elemFile
    >
    > Set elemFolder = AddElem(relemParent, "folder", Null)
    > elemFolder.setAttribute "name", roFolder.Name
    >
    > For Each oFolder In roFolder.SubFolders
    > GetFolderXML elemFolder, oFolder, rdatCutOff
    > Next
    >
    > For Each oFile In roFolder.Files
    > If oFile.DateLastModified > rdatCutOff Then
    > Set elemFile = AddElem(elemFolder, "file", Null)
    > elemFile.setAttribute "name", oFile.Name
    > elemFile.setAttribute "size", oFile.Size
    > elemFile.setAttribute "lastModified", ToISO8601(oFile.DateLastModified)
    > End If
    > Next
    >
    > End Sub
    >
    > Sub DropElems(relem, rsXPath)
    >
    > Dim oNode
    > Dim oList : Set oList = relem.SelectNodes(rsXPath)
    > Dim lDummy : lDummy = oList.length 'Fill list
    > For Each oNode in oList
    > oNode.parentNode.removeChild oNode
    > Next
    >
    > End Sub
    >
    > Function FromISO8601(s)
    > 'See http://www.merlyn.demon.co.uk/vb-date1.htm#DS
    > ' Returns date in local time if timezone not present or GMT if timezone is
    > present
    > FromISO8601 = DateSerial(Mid(s,1,4), Mid(s,5,2), Mid(s,7,2))
    >
    > If Len(s) > 8 Then
    > FromISO8601 = FromISO8601 + CDate(Mid(s,10,8))
    > End If
    >
    > If Len(s) > 17 Then
    > FromISO8601 = FromISO8601 - CInt(Mid(s,18,1) & "1") * CDate(Mid(s,19,5))
    > End If
    >
    > End Function
    >
    > Function ToISO8601(rdat)
    > 'See http://www.merlyn.demon.co.uk/vb-date1.htm#Cymd
    >
    > Dim sYMD : sYMD = CStr((Year(rdat)*100 + Month(rdat) )*100 + Day(rdat))
    > Dim sHMS : sHMS = Right((Hour(rdat)*100+Minute(rdat))*100+Second(rdat)+1e7,
    > 6)
    >
    > ToISO8601 = sYMD & "T" & Left(sHMS, 2) & ":" & Mid(sHMS, 3,2) & ":" &
    > Right(sHMS, 2)
    >
    > End Function
    >
    > Function AddElem(roParent, rsName, rvntValue)
    > Set AddElem = roParent.ownerDocument.createElement(rsName)
    > roParent.appendChild AddElem
    > If Not IsNull(rvntValue) Then AddElem.Text = rvntValue
    > End Function
    > %>
    >
    >
    > Its not a good idea to attempt to build XML output using response writes.
    > The code does not properly encode characters that have meaning in XML nor
    > was the character encoding correct. Had any files contained a & or a
    > character outside the base ASCII range the generated output would be
    > corrupt. My code uses DOM to build the XML, it makes the code much more
    > readable as well.
    >
    > Note that my code uses ISO8601 formating for the date values all the
    > original code. Also it does not even attempt to place path info into the XML
    > nor does it include counts or size totals. All of these pieces of info can
    > be derived from the XML.
    >
    > I have included your request to drop files found in the data folder itself
    > although I would have prefered that the data folder not have other files in
    > it. (Caveat, the folder name 'data' is case sensitive).
    >
    > Call this page like this:-
    >
    > /root/listnewfiles.asp?cutoff=20080819T21:30:00
    >
    > What do you do with this XML once received?
    >
    >
    > --
    > Anthony Jones - MVP ASP/ASP.NET
    >
    >
    >
    Bryan, Aug 20, 2008
    #3
  4. Bryan

    Bryan Guest

    Anthony,
    I've put the asp file in a folder just above the 'data' folder....
    so C:\........\GT\data
    The asp is located in the GT folder.
    I get an internal error.
    I'm calling it like this:
    http://www.hurricanealley.net/GT/test2.asp?cutoff=20080819T21:30:00

    Any suggestions?
    Thanks again,
    Bryan

    --
    Thanks!
    Bryan


    "Anthony Jones" wrote:

    > "Bryan" <> wrote in message
    > news:...
    > > Hello group.
    > > I have some code (given to me), but I don't know alot about ASP, so I was
    > > hoping someone here can help. Running on Win 2008 server.
    > >
    > > The code below will scan a folder and subfolder with a date/time input and
    > > return xml structure off all files that are newer than the supplied

    > date/time.
    > >
    > > The problem is that the returned xml has path names like
    > > C:\folder\subfolder\filename.ext
    > > I would like it to be more like /folder/subfolder/filename.ext
    > > Also, the initial path gets returned in the xml "data", but I only want

    > the
    > > sub folders below "data" to get scanned and info returned...
    > > Any help would be greatly appreciated.
    > >
    > > function indent(iTreeLevel)
    > > dim rv : rv = ""
    > > if iTreeLevel > 0 then
    > > for i = 1 to iTreeLevel
    > > rv = rv & " "
    > > next
    > > end if
    > > indent = rv
    > > end function
    > >
    > > '==========================================
    > >
    > > function newItemsCount(objFolder, dCutoffDate)
    > > dim rv : rv = 0
    > > dim sFileModified
    > > For Each objFile In objFolder.Files
    > > sFileModified = objFile.DateLastModified
    > > If (sFileModified > dCutoffDate) Then
    > > rv = rv + 1
    > > End If
    > > Next
    > > newItemsCount = rv
    > > end function
    > >
    > > '==========================================
    > >
    > > function newItemsSize(objFolder, dCutoffDate)
    > > dim rv : rv = 0
    > > dim sFileModified
    > > For Each objFile In objFolder.Files
    > > sFileModified = objFile.DateLastModified
    > > If (sFileModified > dCutoffDate) Then
    > > rv = rv + objFile.Size
    > > End If
    > > Next
    > > newItemsSize = rv
    > > end function
    > >
    > > '==========================================
    > >
    > > sub FolderListing(strPath, dCutoffDate, blnRecursive, iTreeLevel)
    > >
    > > Dim objFolder
    > > Set objFolder = objFSO.GetFolder(strPath)
    > >
    > > response.write(indent(iTreeLevel) & "<folder name=""" & objFolder.Name &
    > > """ newitems=""" & newItemsCount(objFolder, dCutoffDate) & """
    > > newitems_size=""" & newItemsSize(objFolder, dCutoffDate) & """>" & vbCrLf)
    > >
    > > For Each objFile In objFolder.Files
    > > sFileSize = objFile.Size
    > > sFileName = objFile.Name
    > > sFileType = objFile.Type
    > > sFileCreated = objFile.DateCreated
    > > sFileModified = objFile.DateLastModified
    > > If (sFileModified > dCutoffDate) Then
    > > response.write(indent(iTreeLevel) & " <file name=""" & sFileName & """
    > > size=""" & sFileSize & """ date=""" & sFileModified & """ url=""" &

    > strPath &
    > > "\" & sFileName & """/>" & vbCrLf)
    > > End If
    > > Next
    > >
    > > If blnRecursive Then
    > > Dim objSubFolders
    > > Set objSubFolders = objFolder.SubFolders
    > > For Each objFolder in objSubFolders
    > > sFolderName = objFolder.Name
    > > sFolderPath = strPath & "\" & sFolderName
    > > FolderListing sFolderPath, dCutoffDate, blnRecursive, iTreeLevel+1
    > > Next
    > > End if
    > >
    > > response.write(indent(iTreeLevel) & "</folder>" & vbCrLf)
    > >
    > > end sub
    > >
    > >

    > '===========================================================================
    > ==============
    > >
    > >
    > > sDateTime = unescape(Request.QueryString)
    > > aDateTime = split(sDateTime, " ")
    > > sDate = aDateTime(0)
    > > sTime = aDateTime(1) & " " & aDateTime(2)
    > > dDate = DateValue(sDate)
    > > dTime = TimeValue(sTime)
    > > dDateTime = dDate + dTime
    > >
    > >
    > >
    > > Dim objFSO
    > > Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
    > >
    > >
    > > %>
    > >
    > >
    > >
    > > <?xml version="1.0" encoding="utf-8"?>
    > >
    > > <newfiles fromdate="<%= dDate %>" datestr="<%= sDate %>" timestr="<%=

    > sTime
    > > %>" resultdatetime="<%= dDateTime %>">
    > >
    > > <%
    > > FolderListing server.MapPath("data"), dDateTime, true, 0
    > > %>
    > >
    > > </newfiles>
    > >
    > >

    >
    >
    > Could not bring myself to tweak that code. Here is an alternative ASP:-
    >
    > <%
    >
    > Dim gfso : Set gfso = Server.CreateObject("Scripting.FileSystemObject")
    > Dim gdatCutOff : gdatCutOff = FromISO8601(Request.QueryString("cutoff"))
    >
    > Dim goXML : Set goXML = Server.CreateObject("MSXML2.DOMDocument.6.0")
    > goXML.LoadXML "<newItems />"
    >
    > Dim gelemNewFiles : Set gelemNewFiles = goXML.documentElement
    >
    > gelemNewFiles.setAttribute "from", ToISO8601(gdatCutOff)
    >
    > Dim goDataFolder : Set goDataFolder = gfso.GetFolder(Server.MapPath("data"))
    >
    > GetFolderXML gelemNewFiles, goDataFolder, gdatCutOff
    >
    > DropElems gelemNewFiles, "folder[@name='data']/file"
    >
    > Response.ContentType = "text/xml"
    > Response.CharSet = "UTF-8"
    > goXML.Save Response
    >
    > Sub GetFolderXML(relemParent, roFolder, rdatCutOff)
    >
    > Dim oFolder
    > Dim oFile
    > Dim elemFolder
    > Dim elemFile
    >
    > Set elemFolder = AddElem(relemParent, "folder", Null)
    > elemFolder.setAttribute "name", roFolder.Name
    >
    > For Each oFolder In roFolder.SubFolders
    > GetFolderXML elemFolder, oFolder, rdatCutOff
    > Next
    >
    > For Each oFile In roFolder.Files
    > If oFile.DateLastModified > rdatCutOff Then
    > Set elemFile = AddElem(elemFolder, "file", Null)
    > elemFile.setAttribute "name", oFile.Name
    > elemFile.setAttribute "size", oFile.Size
    > elemFile.setAttribute "lastModified", ToISO8601(oFile.DateLastModified)
    > End If
    > Next
    >
    > End Sub
    >
    > Sub DropElems(relem, rsXPath)
    >
    > Dim oNode
    > Dim oList : Set oList = relem.SelectNodes(rsXPath)
    > Dim lDummy : lDummy = oList.length 'Fill list
    > For Each oNode in oList
    > oNode.parentNode.removeChild oNode
    > Next
    >
    > End Sub
    >
    > Function FromISO8601(s)
    > 'See http://www.merlyn.demon.co.uk/vb-date1.htm#DS
    > ' Returns date in local time if timezone not present or GMT if timezone is
    > present
    > FromISO8601 = DateSerial(Mid(s,1,4), Mid(s,5,2), Mid(s,7,2))
    >
    > If Len(s) > 8 Then
    > FromISO8601 = FromISO8601 + CDate(Mid(s,10,8))
    > End If
    >
    > If Len(s) > 17 Then
    > FromISO8601 = FromISO8601 - CInt(Mid(s,18,1) & "1") * CDate(Mid(s,19,5))
    > End If
    >
    > End Function
    >
    > Function ToISO8601(rdat)
    > 'See http://www.merlyn.demon.co.uk/vb-date1.htm#Cymd
    >
    > Dim sYMD : sYMD = CStr((Year(rdat)*100 + Month(rdat) )*100 + Day(rdat))
    > Dim sHMS : sHMS = Right((Hour(rdat)*100+Minute(rdat))*100+Second(rdat)+1e7,
    > 6)
    >
    > ToISO8601 = sYMD & "T" & Left(sHMS, 2) & ":" & Mid(sHMS, 3,2) & ":" &
    > Right(sHMS, 2)
    >
    > End Function
    >
    > Function AddElem(roParent, rsName, rvntValue)
    > Set AddElem = roParent.ownerDocument.createElement(rsName)
    > roParent.appendChild AddElem
    > If Not IsNull(rvntValue) Then AddElem.Text = rvntValue
    > End Function
    > %>
    >
    >
    > Its not a good idea to attempt to build XML output using response writes.
    > The code does not properly encode characters that have meaning in XML nor
    > was the character encoding correct. Had any files contained a & or a
    > character outside the base ASCII range the generated output would be
    > corrupt. My code uses DOM to build the XML, it makes the code much more
    > readable as well.
    >
    > Note that my code uses ISO8601 formating for the date values all the
    > original code. Also it does not even attempt to place path info into the XML
    > nor does it include counts or size totals. All of these pieces of info can
    > be derived from the XML.
    >
    > I have included your request to drop files found in the data folder itself
    > although I would have prefered that the data folder not have other files in
    > it. (Caveat, the folder name 'data' is case sensitive).
    >
    > Call this page like this:-
    >
    > /root/listnewfiles.asp?cutoff=20080819T21:30:00
    >
    > What do you do with this XML once received?
    >
    >
    > --
    > Anthony Jones - MVP ASP/ASP.NET
    >
    >
    >
    Bryan, Aug 20, 2008
    #4
  5. "Bryan" <> wrote in message
    news:...
    > Anthony,
    > I've put the asp file in a folder just above the 'data' folder....
    > so C:\........\GT\data
    > The asp is located in the GT folder.
    > I get an internal error.
    > I'm calling it like this:
    > http://www.hurricanealley.net/GT/test2.asp?cutoff=20080819T21:30:00
    >
    > Any suggestions?



    Well telling me what the internal error actually is might help.

    My approach took the view that you had control over the receiver. Since you
    haven't got control over that end you will need to tweak the approach to
    generate the same XML structure the client end expected.



    --
    Anthony Jones - MVP ASP/ASP.NET
    Anthony Jones, Aug 20, 2008
    #5
  6. Bryan

    Bryan Guest

    I'm not sure what the error is. I only see the resulting IE error page.
    What is the best approach to debug? I'm only using a text editor.
    Thanks!
    Bryan
    --
    Thanks!
    Bryan


    "Anthony Jones" wrote:

    > "Bryan" <> wrote in message
    > news:...
    > > Anthony,
    > > I've put the asp file in a folder just above the 'data' folder....
    > > so C:\........\GT\data
    > > The asp is located in the GT folder.
    > > I get an internal error.
    > > I'm calling it like this:
    > > http://www.hurricanealley.net/GT/test2.asp?cutoff=20080819T21:30:00
    > >
    > > Any suggestions?

    >
    >
    > Well telling me what the internal error actually is might help.
    >
    > My approach took the view that you had control over the receiver. Since you
    > haven't got control over that end you will need to tweak the approach to
    > generate the same XML structure the client end expected.
    >
    >
    >
    > --
    > Anthony Jones - MVP ASP/ASP.NET
    >
    >
    >
    Bryan, Aug 20, 2008
    #6
  7. "Bryan" <> wrote in message
    news:...
    > I'm not sure what the error is. I only see the resulting IE error page.
    > What is the best approach to debug? I'm only using a text editor.



    In IIS manager click on the application then in the Features View pane
    double click 'ASP' in the IIS section.

    Expand the Debugging Properties and change 'Send Errors To Browser' to True

    Now IIS will send more info to the browser.


    --
    Anthony Jones - MVP ASP/ASP.NET
    Anthony Jones, Aug 20, 2008
    #7
  8. Bryan

    Old Pedant Guest

    "Bryan" wrote:

    > I'm not sure what the error is. I only see the resulting IE error page.


    Also, fix your browser!

    If using MSIE:
    -- Click on TOOLS menu
    -- Click on INTERNET OPTIONS menu item
    -- Click on ADVANCED tab
    -- *UN*check "Show friendly HTTP error messages"
    -- OK

    Now you should get more useful error output.
    Old Pedant, Aug 20, 2008
    #8
  9. Bryan

    Old Pedant Guest

    It's not a big deal, but there's really no need for an INDENT function.

    VBScript has the built-in SPACE function, already.

    So calling
    Space(iTreeLevel)
    is 100% equivalent to your
    indent(iTreeLevel)
    and, of course, somewhat faster.
    Old Pedant, Aug 20, 2008
    #9
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Treeview tweak

    , Nov 9, 2005, in forum: ASP .Net
    Replies:
    0
    Views:
    360
  2. Luke Airig
    Replies:
    0
    Views:
    569
    Luke Airig
    Dec 23, 2003
  3. =?Utf-8?B?Sm9u?=

    Performance tweak

    =?Utf-8?B?Sm9u?=, Oct 5, 2006, in forum: ASP .Net
    Replies:
    7
    Views:
    343
    Kevin Spencer
    Oct 5, 2006
  4. Matty Sarro

    Scanning directories for new files?

    Matty Sarro, Dec 21, 2010, in forum: Python
    Replies:
    2
    Views:
    219
    Martin Gregorie
    Dec 21, 2010
  5. richie_hackett

    Treeview tweak

    richie_hackett, Nov 15, 2005, in forum: ASP .Net Web Controls
    Replies:
    4
    Views:
    122
    richie_hackett
    Nov 21, 2005
Loading...

Share This Page