webForumDet fria alternativet

Katalog struktur

.NET

2 svar · 206 visningar · startad av Mharlin

Medlem sedan juni 200277 inlägg
Frågan#1

Jag jobbar med ett projekt där jag behöver läsa av alla mailboxar och deras underkataloger. Jag kan inte komma på hur jag ska göra för att programmet automatiskt ska gå djupare hela tiden och sen på nåt sätt få fram vad som ligger under vilken katalog. Exempel på hur jag skulle vilja få fram det är:

Root 1.0
Katalog1 (1.1)
Underkatalog (1.1.1)
Ytterligare underkatalog (1.1.1.1)
Underkatalog2 (1.1.2)
Ytterligare Underkatalog (1.1.2.1)
Katalog2 (1.2)
Underkatalog1 (1.2.1)

osv...

Jag skulle vilja ha nåt i stil med det så att varje InfoStore hamnar som en root och sen underkatalogerna efter det. Som jag har skrivit koden nu så får jag fram 2 nivåer djupt men jag vill komma på nåt sätt så att programmet automatiskt går så djupt som det är. Om det finns 5 underkataloger vill jag att den ska hitta alla.

Koden som jag har nu ser ut såhär:

    Dim MyInfoStore As InfoStore
    Dim MyFolder As MAPI.Folder
    Dim strTemp As String
    
    For Each MyInfoStore In s.InfoStores
        strTemp = strTemp & "InfoStore:" & MyInfoStore.Name
        For Each MyFolder In MyInfoStore.RootFolder.Folders
            strTemp = strTemp & "Folder:" & MyFolder.Name
        Next MyFolder
    Next MyInfoStore
    
    frmMain.SendData strTemp

Tacksam för all hjälp jag kan få.

Har funderat på att skapa en rekursiv funktion men jag lyckades aldrig få till något vettigt.

Medlem sedan maj 20018 027 inlägg
#2

Ja, en rekursiv funktion för detta bör funka. Ett exempel som du antagligen behöver modifiera lite.

Public Sub BehandlaMapp(ByRef pMapp As MAPI.Folder)
Dim MyInfoStore As InfoStore
Dim MyFolder As MAPI.Folder
Dim strTemp As String

'Där du gör vad du ska
For Each MyInfoStore In pMapp
    DoSomethingWithMyInfoStore
Next

'Där du gör dina rekursiva anrop
For Each MyFolder In pMapp.Folders
    BehandlaMapp(MyFolder) 'Det rekursiva anropet
Next

End Sub

Så här brukar jag göra med FileSystemObject, och det funkar bra. Du får se hur det funkar med vad du nu håller på med.

Medlem sedan juni 200277 inlägg
#3

Tack, det funkade hur bra som helst:-) Jag vidareutvecklade det hela en aning också... Det blev ganska så flashigt om jag får säga det själv. Allt blev bra när jag fick en putt i rätt riktning ;-)

Public Sub LoadTree()
Dim myIS As InfoStore
Dim myFolder As Folder
Dim myNode As Node

For Each myIS In myOutlook.InfoStores
    Set myNode = frmConfig.TreeView1.Nodes.Add(, , myIS.ID, myIS.Name)
    myNode.Tag = "IS"
    For Each myFolder In myIS.RootFolder.Folders
        EnumerateFolder myFolder, myIS
    Next

Next

End Sub

Public Sub EnumerateFolder(myFolder As Folder, Parent)
Dim myFolder2 As Folder
Me.TreeView1.Nodes.Add Parent.ID, 4, myFolder.ID, myFolder.Name
For Each myFolder2 In myFolder.Folders
    EnumerateFolder myFolder2, myFolder
Next

End Sub

La det i två funktioner istället för än men resultatet är det samma...

Tack Ulf!

252 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)