Seite 1 von 1

Ein Verzeichnis in einer Baumansicht darstellen ?

Verfasst: 08.01.2017 14:38
von Bisonte
Hallo.

Ich habe da mal eine Gedankenblockade...

Ich möchte ein komplettes Laufwerk, das ich rekursiv in eine Liste eingelesen habe nun in einer
Baumansicht darstellen (in einem Textfile), ähnlich der eines TreeGadgets (komplett aufgeklappt).

Code: Alles auswählen

Listeneintrag von Files.s() : Musik:\Album\ACDC\Cover\KeinCover.jpg

So sollte es mal aussehen ....

Baumansicht :

Musik:\>
  +Album>
    +ACDC>
      +Cover>
        -KeinCover.jpg
      -Hells Bells.mp3
      -Thunderstruck.mp3
    +Heintje>
      -Mama.mp3                   
  -Albenliste.txt
  -Wiedergabeliste.mu3
Da ich grad wie das berühmte Schweinchen vor dem Uhrwerk sitze, brennt die Frage :

Wie fange ich das an ?

Ich bin über jeden Denkanstoß dankbar !

Re: Ein Verzeichnis in einer Baumansicht darstellen ?

Verfasst: 08.01.2017 15:26
von TroaX
Am einfachsten geht es, wenn du den Textbaum direkt beim rekursizen einlesen der Dateiliste erstellst. So musst du jetzt den Pfad parsen, um überhaupt die Zugehörigkeiten der Dateien zu den einzelnen Ordnern aufzulösen. Da aber durch das bereits rekursive Einlesen der Liste die Reihenfolge stimmen müsste, würde ich (wenn ich die Dateien nicht selber einlesen könnte) da mit CountString und StringField beigehen. Wird nur eben lustig beim Erstellen der Schleifen. :D

Wenn ich aber auch die Dateiliste einlese, würde ich einfach jedes Element direkt beim Einlesen in den Textstring schreiben und dann hinterher in eine Textdatei speichern. So schlägst du gleich zwei Fliegen mit einer Klappe und kannst dir das parsen der Pfade sparen. ;)

Re: Ein Verzeichnis in einer Baumansicht darstellen ?

Verfasst: 08.01.2017 15:48
von HeX0R
meinst Du so?

Code: Alles auswählen

Structure _FILES_
	Name.s
	Type.s
	Depth.i
EndStructure

Global NewList Files._FILES_()

Procedure GetFiles(Dir.s, Pattern.s = "*.*", Depth.i = 1)
	Protected D
	
	D = ExamineDirectory(#PB_Any, Dir, Pattern)
	If D
		While NextDirectoryEntry(D)
			Select DirectoryEntryType(D)
				Case #PB_DirectoryEntry_Directory
					If DirectoryEntryName(D) <> "." And DirectoryEntryName(D) <> ".."
						AddElement(Files())
						Files()\Name  = DirectoryEntryName(D)
						Files()\Depth = Depth
						Files()\Type  = "+"
						GetFiles(Dir + DirectoryEntryName(D) + "/", Pattern, Depth + 1)
					EndIf
				Case #PB_DirectoryEntry_File
					AddElement(Files())
					Files()\Name  = DirectoryEntryName(D)
					Files()\Depth = Depth
					Files()\Type  = "-"
			EndSelect
		Wend
		FinishDirectory(D)
	EndIf
	
EndProcedure

Procedure main()
	Protected Dir.s, Add.s
	
	Dir = PathRequester("Select Path to scan", "")
	If Dir
		GetFiles(Dir)
		
		ForEach Files()
			Debug RSet(Files()\Type, Files()\Depth, #TAB$) + Files()\Name
		Next
	EndIf
EndProcedure

main()

Re: Ein Verzeichnis in einer Baumansicht darstellen ?

Verfasst: 08.01.2017 16:37
von Bisonte
Ja vielen Dank. Ich hab gerade das ganze ohne Struktur gemacht (Die Ebenen per Static Variable mitgezählt).
So ist natürlich "vornehmer" :allright:

Mein Problem war... Ich habe das Desktopverzeichnis meines Rechners zum testen genommen.
Dieses wird aber immer UNSORTIERT eingelesen.... (Äh Sortiert schon aber nur nach Alphabet und nicht auch Verz. vor Files)
Das kann einen an den Rand des Wahnsinns treiben :o