Einlesen von Verzeichnisinhalten

Anfängerfragen zum Programmieren mit PureBasic.
frankmannb
Beiträge: 47
Registriert: 21.02.2010 13:02

Einlesen von Verzeichnisinhalten

Beitrag von frankmannb »

Hallo an alle,

ich beginne zuri Zeit mich ein wenig in Pure-Basic einzuarbeiten und versuche gerade ein kleines Projekt zu realisieren.
Es soll ein Programm werden in dem man ein Verzeichnis wählt und aus diesem Verzeichnis werden alle Unterverzeichnisse und Dateien in eine CSV-Datei exportiert werden. Ich bin auch schon soweit das das Programm mir aus dem gewählten Pfad die Ordner und Dateien anzeigt aber eben nicht die Unterverzeichnisse. Von daher meine Frage an alle von euch. Kann mir jemand helfen wie ich dies entsprechend realisieren kann?

Vielen Dank Vorab
frankmannb

Hier der bisherige Code
/***********************************************************/

Code: Alles auswählen

  pfad.s = PathRequester("Bitte Pfad zum obersten Verzeichnis wählen","c:\")
  verzeichnis = ExamineDirectory(0,pfad,"*.*")  
  If verzeichnis 
     While NextDirectoryEntry(0)  
       verzeichnis_name.s = DirectoryEntryName(0)    
        Debug verzeichnis_name
     Wend  
     FinishDirectory(0)   
  EndIf
/*********************************************************/

Code-Tags ergänzt - Kaeru fecit
nächstes Mal bitte selber machen, den Button mit der Aufschrift "Code" benutzen.
Benutzeravatar
WPö
Moderator
Beiträge: 669
Registriert: 27.05.2008 12:44
Wohnort: Oberland
Kontaktdaten:

Re: Einlesen von Verzeichnisinhalten

Beitrag von WPö »

Hallo, Frankmannb!

Erstmal willkommen!
Versuche es mit der Rekursion, damit klappt es immer. Du muß allerdings Deine Routinen immer so schreiben, daß sie sich selbst aufrufen können, dann klappt es auch.

Gruß - WPö
Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Einlesen von Verzeichnisinhalten

Beitrag von c4s »

Der Trick ist, dass die Procedure sich selbst aufruft. (Ich muss zugeben, dass ich selbst wohl nie darauf gekommen wäre.)
Hier ein Thema aus dem englischen Forum, das genau dies behandelt: http://www.purebasic.fr/english/viewtop ... 12&t=29599
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
frankmannb
Beiträge: 47
Registriert: 21.02.2010 13:02

Re: Einlesen von Verzeichnisinhalten

Beitrag von frankmannb »

WPo hat geschrieben:Hallo, Frankmannb!

Erstmal willkommen!
Versuche es mit der Rekursion, damit klappt es immer. Du muß allerdings Deine Routinen immer so schreiben, daß sie sich selbst aufrufen können, dann klappt es auch.

Gruß - WPö

HI,
Danke für die schnelle Antwort. Ja Rekursion ist richtig, habe aber dazu leider nichts in der Hilfe finden können. Hast du eventuell ein kleines Beispiel für mich.

danke frankmannb
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Re: Einlesen von Verzeichnisinhalten

Beitrag von Pelagio »

Hallo frankmannb,

auch von mir erst einmal herzlich Willkommen und gleich ein Beispiel, das zwar nicht genau deinem Projekt entspricht aber das willst Du sicherlich auch selber entwickeln, sondern ein Beispiel dafür ist wie die Rekursion funktioniert.

Code: Alles auswählen

Procedure SearchFile(Verzeichnis.s, Extension.s)   
   Protected vID.l, pFind.a = #True
   
   vID = ExamineDirectory(#PB_Any, Verzeichnis, "*.*")
   If vID
      While NextDirectoryEntry(vID)
         FileName$ = DirectoryEntryName(vID)
         If (Filename$<>".") And (Filename$<>"..") 
            Select DirectoryEntryType(vID)
               Case #PB_DirectoryEntry_Directory
                  SearchFile(Verzeichnis + FileName$, Extension) 
               Case #PB_DirectoryEntry_File      
                  If (GetExtensionPart(Filename$)=Extension)
                     If pFind: Debug #NULL$: Debug Verzeichnis: Debug RSet("-", Len(Verzeichnis) * 2, "-"): pFind = #Null: EndIf
                     Debug FileName$
                  EndIf
            EndSelect
         EndIf
      Wend
      FinishDirectory(vID)
   EndIf
EndProcedure

SearchFile("C:\", "log")

End 
:allright:
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS]. :allright:
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Einlesen von Verzeichnisinhalten

Beitrag von Kiffi »

Hallo frankmannb,

willkommen!

Für das Einlesen von Verzeichnissen eignet sich
die folgende Routine von Lebostein ganz gut.

http://www.purebasic.fr/german/viewtopi ... 742#p80742

Grüße ... Kiffi
a²+b²=mc²
frankmannb
Beiträge: 47
Registriert: 21.02.2010 13:02

Re: Einlesen von Verzeichnisinhalten

Beitrag von frankmannb »

@ alle
Vielen Lieben Dank für die schnelle und unbürokratische Hilfe. Hier bei euch im Forum fühlt man sich gleich super aufgehoben. Hätte ich nicht gedacht, das in so kurzer Zeit soviele mögliche Lösungsansätze gepostet werden.
Dafür an alle Vielen Dank

@kiffi
Dein Link hat natürlich genau ins schwarze getroffen. Ist genau das was ich brauche. Das ist super. Jetzt kann ich an meinen Projekt weiterarbeiten und wenn ich Probleme habe weiß ich ja an wen man sich hier im Forum wenden kann :-)

grüße aus Potsdam
frankmannb
Antworten