ListDirectory()

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

ListDirectory()

Beitrag von Scarabol »

Hi Leute,

Code: Alles auswählen

;
**********************************************************************
;
; ListDirectory() - PB-Include
;
; Author: Scarabol
; Version: 4.10
; Datum: 14-02-2008
;
; **********************************************************************
;
; ListDirectory(Directory$, Level, Pattern$)
;
; Beschreibung:
;   Listet alle im Verzeichnis befindlichen Dateien und Unterverzeichnisse auf.
;
; Rückgabewert:
;   Die Funktion gibt einen String zurück.
;   Die Einträge sind durch Chr(10) getrennt.
;

Procedure.s ListDirectory(directory$, level.l=0, pattern$="*.*")
  Protected dir$, d.l, t$
  d = ExamineDirectory(#PB_Any, directory$, pattern$)
  While NextDirectoryEntry(d)
    If DirectoryEntryType(d) = #PB_DirectoryEntry_Directory
      If Not (DirectoryEntryName(d) = "." Or DirectoryEntryName(d) = "..")
        dir$ + directory$+DirectoryEntryName(d)+"\" + Chr(10)
        If level > 0
          t$ = ListDirectory(directory$+DirectoryEntryName(d)+"\", level-1)
          If t$
            dir$ + t$
          EndIf
        EndIf
      EndIf
    ElseIf DirectoryEntryType(d) = #PB_DirectoryEntry_File
      dir$ + DirectoryEntryName(d) + Chr(10)
    EndIf
  Wend
  ProcedureReturn dir$
EndProcedure

; **********************************************************************
;
; ListDirectory() - Example

EnableExplicit

Define d$
Define c.l

d$ = ListDirectory("C:\Windows\")

For c = 1 To CountString(d$, Chr(10))+1
  Debug StringField(d$, c, Chr(10))
Next

;
; **********************************************************************
Gruß
Scarabol
Zuletzt geändert von Scarabol am 14.04.2008 13:23, insgesamt 1-mal geändert.
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

lol ?
Wozu gibs den Parameter Pattern$, wenn dieser einfach ignoriert wird ?

Code: Alles auswählen

ListDirectory("C:\", 0, "Thumbs.db")
Zuletzt geändert von STARGÅTE am 14.04.2008 12:36, insgesamt 1-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ListDirectory()

Beitrag von Kiffi »

da musste noch mal die Beschreibung zum Code anpassen:

-> gibt alle Ordner rekursiv zurück
-> gibt alle Dateien auf Ebene 1 zurück

;-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Der Code oben gibt bei Dateien ja z.B. "Test.txt" zurück, bei Ordnern jedoch den Kompletten Pfad, was muss ich an dem Programm oben machen, damit es bei Ordnern auch nur den Ordnernamen zurückgibt???
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Hi,

dir + directory + directoryentry...

Hier musste das directory weglassen...

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Danke!!!!!!! Klappt Perfekt!!!!!
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

@Scarabol: nochmal zur Nachfrage: Der Code soll alle Unterordner
und alle darin befindlichen Dateien eines angegebenen Pfades
zurückgeben?

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Der gibt alle Ordner und Dateien bis zur angegebenen Tiefe (level) an.

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

naja funzt aber immer noch nicht richtig (vlt solls auch so sein)

Wenn ich jetzt nach Thumbs.db suchen lasse mit 4 Stufen, werde die unterordner ignoriert.
Du müsstest also die Unterordnersuche und rekursivität in einer eigenen schleife packen und dann die spezielle Dateisuche in einer anderen.

Hier mal meine Procedure
Zuletzt geändert von STARGÅTE am 10.07.2010 23:33, insgesamt 3-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Das ist aber nicht schön, alles so in einen String zu packen. Je mehr Dateien
das werden, desto unhandlicher und langsamer wird das, weil nach jeder
Datei wieder Speicher allokiert werden muss, damit sie an die anderen
angehängt werden kann.
Antworten