Toon posts:

[VB6.0/VBA] Directorylist inlezen in een TreeView

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met het maken van een programma waarin ik een directory structuur in wil lezen in een Tree view. Ik loop me nu er al een tijdje mijn kop er over te breken. |:( Het verste wat ik gekomen ben is tot het 2de SubFolder niveau. Ik wil alleen oneindig door kunnen gaan.

Heeft iemand een methode waarmee ik met een paar regeltjes een complete directory structuur gesorteert in kan lezen? Bijvoorbeeld de volgende:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Windows
     Application Data
          Indentities
          Microsoft
               HTML Help
               Installer
               Internet Explorer
                    Quicklauch
               Office
                    Actors
                    Recent
               Templates
     COMMAND
     System
          DirectX
          IOSUBSYS
          QuickTime
          ShellEXT
          VMM32
     System32
     Temporary Internet Files

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
je moet een recursive functie maken die de mappen uitleest en die in de treeview zet. KOmt ie een submap tegen roept ie zichzelf weer aan enzovoorts enzovoorts...
Het snelst is dit volgens mij te doen met findfirstfile en findnextfile....

Verwijderd

Topicstarter
Dat dacht ik in eerste instantie ook, maar dan laat hij de lege mappen weg... Deze moet hij ook mee nemen...

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
met findfirstfile en findnextfile zou hij toch gewoon lege mappen moeten laten zien... althans ik heb ooit iets met die functie gedaan en toen had ik geen problemen.

(Ik heb helaas nergens de source code meer, anders had ik die effe gepost)

  • M_de_Hilg
  • Registratie: November 2000
  • Niet online
Alle sub-directory's binnen een directory zijn op te vragen met Dir$(path, vbDirectory), zo weet je dus voor welke directory's je de zoekmethode recursief moet aanroepen. Gewone files opsommen kun je al dus dan moet het lukken.

Misschien een stomme opmerking maar is een DirListBox niet makkelijker?

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
M_de_Hilg schreef op 13 oktober 2002 @ 22:23:
Alle sub-directory's binnen een directory zijn op te vragen met Dir$(path, vbDirectory), zo weet je dus voor welke directory's je de zoekmethode recursief moet aanroepen. Gewone files opsommen kun je al dus dan moet het lukken.

Misschien een stomme opmerking maar is een DirListBox niet makkelijker?
Wanneer je Dir$ gebruikt tijdens recursief functies gaat dit ten koste van de performance, omdat het pad en de positie waar je in je vorige aanroep stond niet bewaarde blijven... je moet dus opnieuw door dir doorlussen om ibj de uitgangs positie te komen.

Met findfirstfile en findnextfile heb je hier geen last van...

  • M_de_Hilg
  • Registratie: November 2000
  • Niet online
NTGiant schreef op 13 oktober 2002 @ 22:35:
[...]

Wanneer je Dir$ gebruikt tijdens recursief functies gaat dit ten koste van de performance, omdat het pad en de positie waar je in je vorige aanroep stond niet bewaarde blijven... je moet dus opnieuw door dir doorlussen om ibj de uitgangs positie te komen.

Met findfirstfile en findnextfile heb je hier geen last van...
Dat ligt er maar aan hoe je je recursieve methode maakt, als je als argument meegeeft vanaf waar je verder zoekt lijkt mij dit geen probleem.

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 13:00

johnwoo

3S-GTE

NTGiant schreef op 13 oktober 2002 @ 22:35:
[...]

Wanneer je Dir$ gebruikt tijdens recursief functies gaat dit ten koste van de performance, omdat het pad en de positie waar je in je vorige aanroep stond niet bewaarde blijven... je moet dus opnieuw door dir doorlussen om ibj de uitgangs positie te komen.

Met findfirstfile en findnextfile heb je hier geen last van...
Sterker nog, een recursieve functie met Dir$ werkt gewoon niet :) VB gebruikt intern één FindFirstFile...FindNextFile enumeratie voor de Dir$ functie, dus zodra je je recursieve functie aanroept voor een met Dir$ gevonden folder, ben je (in die functie) de rest van de enumeratie kwijt. Een workaround hiervoor is om in de functie eerst een array met subfolders te vullen met een Dir$ loopje, en dan die array recursief aflopen. De Dir$ enumeratie is dan al klaar, dus heb je geen last van het beschreven side effect.
Als je zelf FindFirstFile...FindNextFile gebruikt heb je hier overigens geen last van, omdat je dan zelf in ieder functie(niveau) een aparte Find handle kunt bijhouden.

Een hele poos geleden heb ik zelf ook eens zo'n foldertree componentje gemaakt, maar ik vrees dat ik de source daarvan inmiddels alweer kwijt ben...

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

Kleine tip: Als je gebruikt maakt van een recursieve implementatie moet je rekening houden met de beperkingen van je programmeer taal. Ik kan me vergissen maar volgens mij staat VBA maar een beperkt aantal recursieve aanroepen toe voordat de (call-)stack vol is. Hierdoor zou je stukje kunnen crashen of niet alle directory structuren kunnen weergeven.

Verder is op deze site het progje VBDirectoryTV misschien interessant voor je (redelijk geavanceerd).

|_____vakje______|


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 13:00

johnwoo

3S-GTE

CyberSnooP schreef op 13 oktober 2002 @ 23:00:
Kleine tip: Als je gebruikt maakt van een recursieve implementatie moet je rekening houden met de beperkingen van je programmeer taal. Ik kan me vergissen maar volgens mij staat VBA maar een beperkt aantal recursieve aanroepen toe voordat de (call-)stack vol is. Hierdoor zou je stukje kunnen crashen of niet alle directory structuren kunnen weergeven.

Verder is op deze site het progje VBDirectoryTV misschien interessant voor je (redelijk geavanceerd).
Iedere thread in VB heeft 1 MB stack space, dus een recursieve implementatie voor een foldertree moet wel lukken (een gemiddelde drive zal niet meer dan, pak em beet, 16 niveaus hebben, en ik denk dat je met VB wel veel verder komt dan dat).

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

johnwoo schreef op 13 oktober 2002 @ 23:11:
Iedere thread in VB heeft 1 MB stack space, dus een recursieve implementatie voor een foldertree moet wel lukken (een gemiddelde drive zal niet meer dan, pak em beet, 16 niveaus hebben, en ik denk dat je met VB wel veel verder komt dan dat).
Blijft over het 2e deel van m'n post :)

|_____vakje______|

Pagina: 1