Seite 2 von 2

Verfasst: 13.03.2006 09:46
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")

Re: Verzeichnisbaum rekursiv durchgehen...

Verfasst: 16.04.2011 18:20
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

Re: Verzeichnisbaum rekursiv durchgehen...

Verfasst: 16.04.2011 18:40
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.

Re: Verzeichnisbaum rekursiv durchgehen...

Verfasst: 16.04.2011 18:50
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?!