Hello and welcome to our community! Is this your first visit?
Register
Enjoy an ad free experience by logging in. Not a member yet? Register.
Results 1 to 2 of 2
  1. #1
    Rockstar Coder
    Join Date
    Jun 2002
    Location
    USA
    Posts
    9,074
    Thanks
    1
    Thanked 328 Times in 324 Posts

    FileSystemObject problems

    I'm using this code which i got from www.asp101.com:

    Code:
    <HEAD>
    <TITLE>Proving Grounds</TITLE>
    </HEAD>
    
    <%
    ' This function takes a filename and returns the appropriate image for
    ' that file type based on it's extension.  If you pass it "dir", it assumes
    ' that the corresponding item is a directory and shows the folder icon.
    Function ShowImageForType(strName)
    	Dim strTemp
    
    	' Set our working string to the one passed in
    	strTemp = strName
    	
    	' If it's not a directory, get the extension and set it to strTemp
    	' If it is a directory, then we already have the correct value
    	If strTemp <> "dir" Then
    		strTemp = LCase(Right(strTemp, Len(strTemp) - InStrRev(strTemp, ".", -1, 1)))
    	End If
    	
    	' Debugging line used to perfect that above string parser
    	'Response.Write strTemp
    	
    	' Set the part of the image file name that's unique to the type of file
    	' to it's correct value and set this to strTemp. (yet another use of it!)
    	Select Case strTemp
    		Case "asp", "aspx"
    			strTemp = "asp"
    		Case "dir"
    			strTemp = "dir"
    		Case "htm", "html"
    			strTemp = "htm"
    		Case "gif", "jpg"
    			strTemp = "img"
    		Case "txt"
    			strTemp = "txt"
    		Case "php", "php3", "php4"
    			strTemp = "php"
    		Case Else
    			strTemp = "misc"
    	End Select
    
    	' All our logic is done... build the IMG Tag for display to the browser
    	' Place it into... where else... strTemp!
    
    	' My images are all GIFs and all start with "dir_" for my own sanity.
    	' They end with one of the values set in the select statement above.
    
    	strTemp = "<img src=""FB/dir_" & strTemp & ".gif"" width=""16"" height=""16"" border=""0"">"
    
    	' Set return value and exit function
    	ShowImageForType = strTemp
    End Function
    'That's it for functions on this one!
    %>
    
    
    <%' Now to the Runtime code:
    Dim strPath   'Path of directory to show
    Dim objFSO    'FileSystemObject variable
    Dim objFolder 'Folder variable
    Dim objItem   'Variable used to loop through the contents of the folder
    
    ' A recordset object variable and some selected constants from adovbs.inc.
    ' I use these for the sorting code.
    Dim rstFiles
    Const adVarChar = 200
    Const adInteger = 3
    Const adDate = 7
    
    
    ' You could just as easily read this from some sort of input, but I don't
    ' need you guys and gals roaming around our server so I've hard coded it to
    ' a directory I set up to illustrate the sample.
    ' NOTE: As currently implemented, this needs to end with the /
    strPath = "./files/"
    
    ' Create our FSO
    Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
    
    ' Get a handle on our folder
    Set objFolder = objFSO.GetFolder(Server.MapPath(strPath))
    
    ' Show a little description line and the title row of our table
    %>
    Contents of <strong><%= strPath %></strong><br />
    
    <br />
    
    <table border="5" bordercolor="green" cellspacing="0" cellpadding="2">
    	<tr bgcolor="#006600">
    		<td><font color="#FFFFFF"><b>File Name:</b></font></td>
    		<td><font color="#FFFFFF"><b>File Size (bytes):</b></font></td>
    		<td><font color="#FFFFFF"><b>Date Created:</b></font></td>
    		<td><font color="#FFFFFF"><b>File Type:</b></font></td>
    	</tr>
    <%
    
    ' First I deal with any subdirectories.  I just display them and when you
    ' click you go to them via plain HTTP.  You might want to loop them back
    ' through this file once you've set it up to take a path as input.  It seems
    ' like the logical thing to do to me at least!
    For Each objItem In objFolder.SubFolders
    	' Deal with the stupid VTI's that keep giving our visitors 404's
    	If InStr(1, objItem, "_vti", 1) = 0 Then
    	%>
    	<tr bgcolor="#CCFFCC">
    		<td align="left" ><%= ShowImageForType("dir") %>&nbsp;<a href="<%= strPath & objItem.Name %>"><%= objItem.Name %></a></td>
    		<td align="right"><%= objItem.Size %></td>
    		<td align="left" ><%= objItem.DateCreated %></td>
    		<td align="left" ><%= objItem.Type %></td>
    	</tr>
    	<%
    	End If
    Next 'objItem
    
    ' Now that I've done the SubFolders, do the files!
    
    ' In order to be able to sort them easily and still close the FSO relatively
    ' quickly I'm going to make use of an ADO Recordset object with no attached
    ' datasource.  While it does have a slightly greater overhead then an array
    ' or dictionary object, it gives me named access to the fields and has built
    ' in sorting functionality.
    Set rstFiles = Server.CreateObject("ADODB.Recordset")
    rstFiles.Fields.Append "name", adVarChar, 255
    rstFiles.Fields.Append "size", adInteger
    rstFiles.Fields.Append "date", adDate
    rstFiles.Fields.Append "type", adVarChar, 255
    rstFiles.Open
    
    For Each objItem In objFolder.Files
    	rstFiles.AddNew
    	rstFiles.Fields("name").Value = objItem.Name
    	rstFiles.Fields("size").Value = objItem.Size
    	rstFiles.Fields("date").Value = objItem.DateCreated
    	rstFiles.Fields("type").Value = objItem.Type
    Next 'objItem
    
    ' All done!  Kill off our File System Object variables.
    Set objItem = Nothing
    Set objFolder = Nothing
    Set objFSO = Nothing
    
    ' Now we can sort our data and display it:
    
    ' Sort ascending by size and secondarily descending by date
    ' (by date is mainly for illustration since all our files
    '  are different sizes)
    rstFiles.Sort = "size ASC, date DESC"
    
    rstFiles.MoveFirst
    
    Do While Not rstFiles.EOF
    	%>
    	<tr bgcolor="#CCFFCC">
    		<td align="left" ><%= ShowImageForType(rstFiles.Fields("name").Value) %>&nbsp;<a href="<%= strPath & rstFiles.Fields("name").Value %>"><%= rstFiles.Fields("name").Value %></a></td>
    		<td align="right"><%= rstFiles.Fields("size").Value %></td>
    		<td align="left" ><%= rstFiles.Fields("date").Value %></td>
    		<td align="left" ><%= rstFiles.Fields("type").Value %></td>
    	</tr>
    	<%
    	rstFiles.MoveNext
    Loop
    
    ' Close our ADO Recordset object
    rstFiles.Close
    Set rstFiles = Nothing
    
    'Close the table
    %>
    </table>
    I was just starting to modifiy it a little. But it doesn't seem to work the IIS server on my computer. It just times out or it says that the 'GetFolder' method isn't supported. Yet, I uploaded it to my hosting's web server and it works fine.

    Any ideas why?

  • #2
    Supreme Master coder! glenngv's Avatar
    Join Date
    Jun 2002
    Location
    Philippines
    Posts
    10,960
    Thanks
    0
    Thanked 236 Times in 233 Posts
    is the path correct?

    strPath = "./files/"

    ' Create our FSO
    Set objFSO = Server.CreateObject("Scripting.FileSystemObject")

    ' Get a handle on our folder
    Set objFolder = objFSO.GetFolder(Server.MapPath(strPath))


  •  

    Posting Permissions

    • You may not post new threads
    • You may not post replies
    • You may not post attachments
    • You may not edit your posts
    •