webForumDet fria alternativet
Logga in / Bli medlem

katalog med fillista i trädform

ASP

16 svar · 635 visningar · startad av Jesper T

Medlem sedan nov. 20017 144 inlägg
Trådstart#1

Skulle behöva en filkatalog som ligger i en trädstruktur med expanderbara mappar. Har någon sätt en sådan någon stans?

Medlem sedan dec. 19998 577 inlägg
#2

Kolla in Dimacs SiteTree. :)

Medlem sedan nov. 20017 144 inlägg
#3

Vide: Tack men det var någon slags betalkomponent, det är inte riktigt intressant.

Jag får göra en själv.

Går det på något vis att loopa ut alla foldrar subfoldrar och filer?
I detta exempel så lopas endast aktuell struktur i aktuell mapp.

Dim strfolder,rootname,Dirfolder
strfolder = "docs/"
rootname = server.mappath("docs")& "\"
Dirfolder = request.querystring("dir")

Set FSO = Server.CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder(rootname & Dirfolder)
set Files = Folder.Files

'Lite obetydande kod

For each Item in Folder.SubFolders
   response.write "<img src=imgs/folder_close.gif width=16 height=15>&nbsp;<a href='" & strScriptname & "?Dir="&dirfolder&"\"&Item.Name & "'>" & Item.Name & "</A><br>"
Next

For each Item In Files
   response.write "<img src=imgs/"& fileType(Item.Name)& " width=20 height=17><a href="&strFolder&dirfolder&"\"&Item.Name&">"&Item.Name&"</A><br>"
Next
Medlem sedan dec. 19998 577 inlägg
#4

Du får bygga en rekursiv funktion som letar sig på djupet också. :)

[R] Vad säger jag för något? Vill du ha den dynamisk på klientsidan också så måste du bygga en rekursiv funktion, annars kan du bara skicka med aktuell folder för att få subfoldrar och filer.

Sedan får du bygga en funktion som hämtar sökvägen "ovanför" den mapp du står i, och skriva ut den.

Medlem sedan mars 20015 287 inlägg
#5

Den redigerar vi bort igen pga av en liten bugg. :e

Medlem sedan nov. 20017 144 inlägg
#6

Vide skrev:

annars kan du bara skicka med aktuell folder för att få subfoldrar och filer.

Vad menar du med det? Jag skulle vilja ha den så här:

[red]Mapp1
   UnderMapp1.1
       Fil1.1.1
       Fil1.1.2
   UnderMapp1.2
   UnderMapp1.3
Mapp2
   UnderMapp2.1
       Fil2.1.1
Mapp3
 osv...[/red]
Medlem sedan mars 20015 287 inlägg
#7

Det ska väl inte vara så svårt? Du har ju redan nu i princip en funktion. Gör en funktion eller sub av den kod du har, sen ser du till att köra den rekursivt inne i funktionen/subben på alla katalogerna du finner... (Går det? ;) )

Medlem sedan dec. 19998 577 inlägg
#8

solbulle, precis vad jag menade... och ja, det går. ;)

Medlem sedan mars 20015 287 inlägg
#9

Typ detta listar ju en del...

<%
Dim strfolder,rootname,Dirfolder
strfolder = "docs/"
rootname = server.mappath("docs")& "\"
Dirfolder = request.querystring("dir")

Call explorer(rootname,Dirfolder)

Sub explorer(rootname,Dirfolder)

Set FSO = Server.CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder(rootname & Dirfolder)
set Files = Folder.Files

'Lite obetydande kod

For each Item in Folder.SubFolders
   response.write "<img src=imgs/folder_close.gif width=16 height=15> <a href='" & strScriptname & "?Dir="&dirfolder&"\"&Item.Name & "'>" & Item.Name & "</A><br>"
Call explorer(rootname,Dirfolder&"/"&Item.Name)
Next

For each Item In Files
   response.write "<img src=imgs/"& fileType(Item.Name)& " width=20 height=17><a href="&strFolder&dirfolder&"\"&Item.Name&">"&Item.Name&"</A><br>"
Next

End Sub
%>
Medlem sedan nov. 20017 144 inlägg
#10

Härligt, solbulle!

Medlem sedan nov. 20017 144 inlägg
#11

Jag får lite fel på denna rad, något strular:

Microsoft VBScript runtime error '800a000d'

Type mismatch: 'GetSubFolders'

filetree.asp, line 45

Dim rootname, fso, folder
rootname = server.mappath("docs")& "\"
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(rootname)

[b]Rad 45-->[/b]Response.Write "<UL>" &  GetSubFolders(folder) & "</UL>"

Sub GetSubFolders(pfolder)
    Dim sFolders, fldr, fil
    sFolders = "<LI>" & pfolder.Name

    If pfolder.SubFolders.Count > 0 Or pfolder.Files.Count > 0 Then _
        sFolders = sFolders & "<UL>"

    For Each fldr In pfolder.SubFolders
        sFolders = sFolders & GetSubFolders(fldr)
    Next
    
    For Each fil In pfolder.Files
        sFolders = sFolders & "<LI>" & fil.Name & "</LI>"
    Next
    
    If pfolder.SubFolders.Count > 0 Or pfolder.Files.Count > 0 Then _
        sFolders = sFolders & "</UL>"
    
    sFolders = sFolders & "</LI>"

    Set fil = Nothing
    Set fldr = Nothing
    
    GetFolder = sFolders
End Sub
Medlem sedan dec. 19998 577 inlägg
#12

Skall du använda den som en funktion (återge ett värde) så måste du göra det också. ;)

[b]function[/b] GetSubFolders(pfolder)
    Dim sFolders, fldr, fil
    sFolders = "<LI>" & pfolder.Name

    If pfolder.SubFolders.Count > 0 Or pfolder.Files.Count > 0 Then _
        sFolders = sFolders & "<UL>"

    For Each fldr In pfolder.SubFolders
        sFolders = sFolders & GetSubFolders(fldr)
    Next
    
    For Each fil In pfolder.Files
        sFolders = sFolders & "<LI>" & fil.Name & "</LI>"
    Next
    
    If pfolder.SubFolders.Count > 0 Or pfolder.Files.Count > 0 Then _
        sFolders = sFolders & "</UL>"
    
    sFolders = sFolders & "</LI>"

    Set fil = Nothing
    Set fldr = Nothing
    
    [b]GetSubFolders[/b] = sFolders
End [b]function[/b]
Medlem sedan nov. 20017 144 inlägg
#13

En sista fråga: Går det att få hela sökvägen till filen ifrån "rootname" här?

For Each fil In pfolder.Files
        sFolders = sFolders & "<LI>" & [b]fil.Name[/b] & "</LI>"
    Next
Medlem sedan nov. 20017 144 inlägg
#14

Någon, som vet?

Medlem sedan nov. 20017 144 inlägg
#15

Jag har kört fast, kan ingen hjälpa mig?

Medlem sedan dec. 2000503 inlägg
#16

Jag är oxå väldigt sugen på att veta hur man får tag i rootnamnet.

Medlem sedan dec. 2000503 inlägg
#17

Hittade det:
fil.path

503 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
244 ms — deklarationer (db)
122 ms — hämta statistik (db)
135 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)