AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

rekursionstiefe erkennen bei ordnern

Ein Thema von blinder007 · begonnen am 19. Sep 2014 · letzter Beitrag vom 19. Sep 2014
Antwort Antwort
Seite 1 von 2  1 2      
blinder007

Registriert seit: 29. Mär 2013
30 Beiträge
 
#1

rekursionstiefe erkennen bei ordnern

  Alt 19. Sep 2014, 14:42
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;
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: rekursionstiefe erkennen bei ordnern

  Alt 19. Sep 2014, 15:22
das funktioniert leider nicht so ganz.
Was genau funktioniert denn nicht?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#3

AW: rekursionstiefe erkennen bei ordnern

  Alt 19. Sep 2014, 15:37
...; Recurse: Boolean = True; Recursionstiefe: Integer=0); und dann beim Aufruf der Recursion dort Recursionstiefe+1 übergeben?


Zitat:
das funktioniert leider nicht so ganz. hier mein code der besagten methode:
Nicht ganz?

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 )



Zitat:
if not (name[1] = '.') then liste.Add(name);
Falsch, denn um dich einfach mal nach Linux, oder besser in einen Apache gucken zu lassen ... du kennst nicht zufällig Dateien wie .htaccess, oder wie wäre es mit den .git- und .svn-Verzeichnissen?
Auch wenn der Explorer sich weigert solche Dateinamen händisch anlegen zu lassen. Das Dateisystem erlaubt es und viele Programme machen es auch.

if (Name <> '.') and (Name <> '..') then oder if MatchStr(Name, ['.', '..']) then wäre möglich.
Rein theoretisch wäre es möglich im Dateisystem eine Datei "ohne" Namen zu haben, womit dann ein Zugriff ala Name[1] knallen würde, da es kein erstes Zeichen gibt, aber zum Glück für dich ist das nahezu ausgeschlossen.

Oder wolltest du damit Verzeichnisse mit solchen Namen ausblenden?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (19. Sep 2014 um 15:45 Uhr)
  Mit Zitat antworten Zitat
blinder007

Registriert seit: 29. Mär 2013
30 Beiträge
 
#4

AW: rekursionstiefe erkennen bei ordnern

  Alt 19. Sep 2014, 16:05
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
  Mit Zitat antworten Zitat
Faxe

Registriert seit: 10. Jan 2013
29 Beiträge
 
Delphi XE3 Professional
 
#5

AW: rekursionstiefe erkennen bei ordnern

  Alt 19. Sep 2014, 16:18
if SR.Attr and faDirectory <> faDirectory then
Was bringt eigentlich hierbei die 2. Bedingung?
  Mit Zitat antworten Zitat
pelzig
(Gast)

n/a Beiträge
 
#6

AW: rekursionstiefe erkennen bei ordnern

  Alt 19. Sep 2014, 16:19
Eine Procedure (tform1.FindAllFiles) rekursiv aufrufen?

himitsu, bitte übernehmen Sie

MfG
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#7

AW: rekursionstiefe erkennen bei ordnern

  Alt 19. Sep 2014, 16:41
Mal abgesehen vom Lerneffekt...

Mit dem Kommandozeilenbefehl
Code:
DIR {Verzeichnis} /S /B
erhältst Du eine wunderschöne Liste aller Dateien im angegebenen Verzeichnis und südlich davon.

Das ließe sich per Programm auch gut auseinandernehmen...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#8

AW: rekursionstiefe erkennen bei ordnern

  Alt 19. Sep 2014, 17:00
Mal abgesehen vom Lerneffekt...
Seit paar Jahren gibt es auch die Unit IOUtils, worin sich z.B. ein TDirectory.GetFiles versteckt.


Zitat:
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
Eine lokale Variable in der Funktion kann natürlich nur Dinge darin zählen, aber nichts Prozedurübergreifendes.
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (19. Sep 2014 um 17:02 Uhr)
  Mit Zitat antworten Zitat
pelzig
(Gast)

n/a Beiträge
 
#9

AW: rekursionstiefe erkennen bei ordnern

  Alt 19. Sep 2014, 17:17
Müsste man beim rekursiven Procedure-Aufruf nicht irgendwo trotzdem noch global den Anfangswert der Rekursionstiefe setzen

MfG
  Mit Zitat antworten Zitat
Faxe

Registriert seit: 10. Jan 2013
29 Beiträge
 
Delphi XE3 Professional
 
#10

AW: rekursionstiefe erkennen bei ordnern

  Alt 19. Sep 2014, 18:29
Man könnte auch bei jedem gefundenen Ordner im Namen mal die PathDelimiter zählen und das als jeweilige Tiefe ansehen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz