![]() |
rekursionstiefe erkennen bei ordnern
hallo liebe foren-mitglieder,
also, ich schreibe zzt. ein Programm um meine Musiksammlung nicht per hand in eine datenbank eingliedern zu müssen. die ordner sind in genre, künstler, album aufgeteilt. mit der findfirst methode und diesen dingen schaffe ich es eine liste aller Ordner zu erhalten und sie auszugeben. Sprich: ich habe (in dem fall) eine Textdatei oder halt eine tstringlist, in der untereinander weg erst genre, dan künstler und dann album stehen. für einen uneingeweiten ist das natürlich unübersichtlich. deswegen würde ich gerne vor die einträge schreiben etwas wie "künstler:" und "album". sozusagen unterüberschriften einfügen. die ausgabe soll im enteffekt auch dazu genutzt werden außenstehenden einen Überblick über meine Sammlung zu geben. mein ansatz war zu erkennen, auf welcher rekursionstiefe die funktion ist, um ein entsprechendes präfix zu setzen. das funktioniert leider nicht so ganz. hier mein code der besagten methode:
Delphi-Quellcode:
procedure tform1.FindAllFiles(var FileList: TStrings; RootFolder: string; Mask: string ='*.*'; Recurse: Boolean = True);
procedure schreibename(name: string); begin if not (name[1] = '.') then liste.Add(name); end; var SR: TSearchRec; begin RootFolder := IncludeTrailingPathDelimiter(RootFolder); if Recurse then if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then try repeat if SR.Attr and faDirectory = faDirectory then begin if (sr.name <> '.') and (SR.Name <> '..') then FindAllFiles(FileList, RootFolder + SR.Name, Mask, Recurse); //schreibename(sr.name); end; until FindNext(SR) <> 0; finally FindClose(SR); end; if FindFirst(RootFolder + Mask, faAnyFile, SR) = 0 then try repeat if SR.Attr and faDirectory <> faDirectory then begin //FileList.Add(RootFolder + SR.Name); end; until FindNext(SR) <> 0; finally FindClose(SR); end; end; |
AW: rekursionstiefe erkennen bei ordnern
Zitat:
|
AW: rekursionstiefe erkennen bei ordnern
Delphi-Quellcode:
und dann beim Aufruf der Recursion dort Recursionstiefe+1 übergeben? :stupid:
...; Recurse: Boolean = True; Recursionstiefe: Integer=0);
Zitat:
Es geht garnicht, denn entgegen deiner Beschreibung ist da doch garnichts an Code drin enthalten, was dafür zuständig sein könnte. Dein nicht vorhandener Versuch funktioniert also ohne Probleme. (es ist nichts drin, was nicht funktioniert und somit funktioniert alles, wie es soll :roll:) Zitat:
Auch wenn der Explorer sich weigert solche Dateinamen händisch anlegen zu lassen. Das Dateisystem erlaubt es und viele Programme machen es auch.
Delphi-Quellcode:
oder
if (Name <> '.') and (Name <> '..') then
Delphi-Quellcode:
wäre möglich.
if MatchStr(Name, ['.', '..']) then
Rein theoretisch wäre es möglich im Dateisystem eine Datei "ohne" Namen zu haben, womit dann ein Zugriff ala
Delphi-Quellcode:
knallen würde, da es kein erstes Zeichen gibt, aber zum Glück für dich ist das nahezu ausgeschlossen.
Name[1]
Oder wolltest du damit Verzeichnisse mit solchen Namen ausblenden? |
AW: rekursionstiefe erkennen bei ordnern
ich habe versucht einen integer in die procedure einzubauen, der die recursionstiefe mitzählt. aber im enteffekt hatte ich immer nur den schleifendurchlauf, aber nie die rekursionstiefe
|
AW: rekursionstiefe erkennen bei ordnern
Zitat:
|
AW: rekursionstiefe erkennen bei ordnern
Eine Procedure (tform1.FindAllFiles) rekursiv aufrufen?
himitsu, bitte übernehmen Sie :wink: MfG |
AW: rekursionstiefe erkennen bei ordnern
Mal abgesehen vom Lerneffekt...
Mit dem Kommandozeilenbefehl
Code:
erhältst Du eine wunderschöne Liste aller Dateien im angegebenen Verzeichnis und südlich davon.
DIR {Verzeichnis} /S /B
Das ließe sich per Programm auch gut auseinandernehmen... |
AW: rekursionstiefe erkennen bei ordnern
Zitat:
Zitat:
Dafür braucht man entweder eine böse globale Variable, was wir natürlich nicht verwenden oder man muß die Variable an die anderen Prozeduren übergeben. (als VAR kann man die Verzeichnisanzahl zählen und als normaler Parameter die Tiefe, da sich Änderungen immer nur nach unten auswirken und nicht zurück) |
AW: rekursionstiefe erkennen bei ordnern
Müsste man beim rekursiven Procedure-Aufruf nicht irgendwo trotzdem noch global den Anfangswert der Rekursionstiefe setzen :?:
MfG |
AW: rekursionstiefe erkennen bei ordnern
Man könnte auch bei jedem gefundenen Ordner im Namen mal die PathDelimiter zählen und das als jeweilige Tiefe ansehen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz