Verzeichnisbaum rekursiv durchgehen...

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag von Lebostein »

Hier das gleiche mit PB 3.X, leider gibt es hier noch keinen Befehl, um ein Suchverzeichnis wieder zu entfernen (FinishDirectory)

Code: Alles auswählen

; ----------------------------------------

Procedure ListFiles(EntryPath.s)

  EntryPath + "\"

  UsedDirectory = ExamineDirectory(#PB_Any, EntryPath, "*.*")

  Repeat: UseDirectory(UsedDirectory)

    EntryType.l = NextDirectoryEntry(): If EntryType = 0: Break: EndIf
    EntryName.s = DirectoryEntryName()

    If EntryName = "." Or EntryName = "..": Continue: EndIf

    If EntryType = 1: Debug "File: " + EntryPath + EntryName: EndIf
    If EntryType = 2: ListFiles(EntryPath + EntryName): EndIf

  ForEver

EndProcedure

; ----------------------------------------

ListFiles("c:\windows")
Renovatio

Re: Verzeichnisbaum rekursiv durchgehen...

Beitrag von Renovatio »

Ich habe mir mal diesen Code kopiert und an meine Bedürfnisse angepasst, nur funktioniert das jetzt nicht immer.
Meine Anwendung hängt sich dann bei bestimmten Verzeichnissen auf.

Bekomme auch folgenden Fehler: Das angegebene #Directory ist nicht initialisiert

Woran kann das liegen?


Hier ist der Code

Code: Alles auswählen

Procedure FileManager_CheckFiles(Path$)
	
	Path$ + "\"
	Files = 0
	
	Dir = ExamineDirectory(#PB_Any, Path$, "*.*")
	
	While NextDirectoryEntry(Dir)
		
		Name$ = DirectoryEntryName(Dir)
		Type = DirectoryEntryType(Dir)
		Size = (DirectoryEntrySize(Dir) / 1024) / 1024
		
		If Name$ = "." Or Name$ = ".." : Continue : EndIf
		
		If Type = #PB_DirectoryEntry_File
			
			FileManager_Files + 1
			FileManager_TotalSize + Size
			
			FileType$ = Right(Name$, 4)
			
			AddGadgetItem(#GadgetVideosFiles, -1, RemoveString(Name$, FileType$) + Chr(10) + Str(Size) + " MB" + Chr(10) + UCase(FileType$) + "-Datei")
			
		EndIf
		If Type = #PB_DirectoryEntry_Directory
			
			FileManager_CheckFiles(Path$ + Name$)
			
		EndIf
		
	Wend
	
	FinishDirectory(Dir)
	
EndProcedure

Bei dem Pfad -> "F:\02 » Movies\Filme" funktioniert's und bei allen anderen die mit C zu tun haben leider nicht.


Gruß

Renovatio
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Verzeichnisbaum rekursiv durchgehen...

Beitrag von STARGÅTE »

An deiner Stelle würde ich einfach mal prüfen ob ExamineDirectory() erfolgreich war!
Wenn nicht, ist es natürlich klar, das dann das folgende NextDirectoryEntry() einen fehler verurscht.

Beispiel: "C:\System Volume Information" wird als Ordner erkannt, kann aber nicht gelesen werden.

Also einfach ein "If Dir" mit einbauen.
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
Renovatio

Re: Verzeichnisbaum rekursiv durchgehen...

Beitrag von Renovatio »

STARGÅTE hat geschrieben:An deiner Stelle würde ich einfach mal prüfen ob ExamineDirectory() erfolgreich war!
Wenn nicht, ist es natürlich klar, das dann das folgende NextDirectoryEntry() einen fehler verurscht.

Beispiel: "C:\System Volume Information" wird als Ordner erkannt, kann aber nicht gelesen werden.

Also einfach ein "If Dir" mit einbauen.
Ja ! Affengeil ! xD

Wie immer besten Dank für diese schnelle Hilfe!

Wie oft man den Wald vor lauter Bäumen nicht sehen kann?!
Antworten