Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi suche Funktion FindLastDir (https://www.delphipraxis.net/103170-suche-funktion-findlastdir.html)

bluescreen25 11. Nov 2007 18:39


suche Funktion FindLastDir
 
suche eine Funktion, die mir ausgehend von einem Pfad , in dem weitere Unterverzeichnisse sind, immer tiefer ins erste "erreichbare"** Unterverzeichnis geht bis keines mehr vorhanden ist und mir den "tiefsten" Pfad zurückliefert.

** der erste Ordner,alphabetisch wie im Windows-Explorer

Jemand ne Idee oder Ansatz?

Gruß, bluescreen25

Nuclear-Ping 11. Nov 2007 18:41

Re: suche Funktion FindLastDir
 
http://dsdt.info/tipps/?id=134

bluescreen25 11. Nov 2007 19:01

Re: suche Funktion FindLastDir
 
Zitat:

Zitat von Nuclear-Ping
http://dsdt.info/tipps/?id=134

Danke, aber eigendlich wollte ich nicht alle Files oder Dirs in Stringlisten verwalten, lediglich die Rückgabe der tiefsten Ebene eines Pfades.

Dachte eher an sowas nur umgekehrt...:

Delphi-Quellcode:
function GetAudioplayerDirectory(const APath: String): String;
var
  i: Integer;
begin
  Result:=APath;
  i:=Length(APath);
  If i>3 Then
  Begin
    Repeat
      Dec(i);
    Until (APath[i] = '\') OR (i=1);
    If APath[i]='\' Then
      Result:=Copy(APath,1,i);
  End
end;

marabu 11. Nov 2007 19:15

Re: suche Funktion FindLastDir
 
Hallo,

vielleicht hilft dir das: Letzten Ordnernamen eines Pfades ermitteln

Grüße vom marabu

bluescreen25 11. Nov 2007 19:30

Re: suche Funktion FindLastDir
 
Zitat:

Zitat von marabu
Hallo,

vielleicht hilft dir das: Letzten Ordnernamen eines Pfades ermitteln

Grüße vom marabu

das ist leider auch nicht ,was ich suche...

Ich habe C:\Ordner1 und am Ende möchte ich C:\Ordner1\UnterOrdner1\UnterOrdner1... haben, sprich den letzten und im ersten Moment unbekannten Pfad. Falls es noch UnterOrdner 2 oder mehr gibt, sind diese unberücksichtigt. Immer nur solange in den ersten verfügbaren Ordner springen bis es nicht tiefer geht und dann den vollen Pfad ausgeben.


Gruß, bluescreen25

C.Schoch 11. Nov 2007 21:01

Re: suche Funktion FindLastDir
 
Das kannst du recht einfach mit FindFirst ohne Rekursion erledigen.
Einfach FindFirst mit dem Dateinamen des letzten Aufrufs aufrufen, bis der Rückgabewert <> 0 ist.
Als Filter solltest du faDirectory setzen

Nuclear-Ping 11. Nov 2007 21:14

Re: suche Funktion FindLastDir
 
Zitat:

Zitat von bluescreen25
Zitat:

Zitat von Nuclear-Ping
http://dsdt.info/tipps/?id=134

Danke, aber eigendlich wollte ich nicht alle Files oder Dirs in Stringlisten verwalten, lediglich die Rückgabe der tiefsten Ebene eines Pfades.

Was ist ein "Pfad" in dem Fall für dich? Ein String oder ein Verzeichnis auf der Festplatte, von dem du noch nicht weißt, was die tiefste Ebene ist?

Falls es ein String ist, kannst du dir entweder eine Funktion schreiben, die den String rückwärts nach dem ersten Vorkommen von '\' (oder '/' je nach Fall) durchsucht und einfach mit Copy den Teil von der Position ausgehend rauskopieren oder nach einer "LastPos" Funktion suchen.

Falls es das letztere ist, dann sollte der Link die Grundlage bilden, die letzte Ebene eines Verzeichnisses zu finden.

bluescreen25 11. Nov 2007 21:23

Re: suche Funktion FindLastDir
 
Zitat:

Zitat von Nuclear-Ping
Zitat:

Zitat von bluescreen25
Zitat:

Zitat von Nuclear-Ping
http://dsdt.info/tipps/?id=134

Danke, aber eigendlich wollte ich nicht alle Files oder Dirs in Stringlisten verwalten, lediglich die Rückgabe der tiefsten Ebene eines Pfades.

Was ist ein "Pfad" in dem Fall für dich? Ein String oder ein Verzeichnis auf der Festplatte, von dem du noch nicht weißt, was die tiefste Ebene ist?

Falls es ein String ist, kannst du dir entweder eine Funktion schreiben, die den String rückwärts nach dem ersten Vorkommen von '\' (oder '/' je nach Fall) durchsucht und einfach mit Copy den Teil von der Position ausgehend rauskopieren oder nach einer "LastPos" Funktion suchen.

Falls es das letztere ist, dann sollte der Link die Grundlage bilden, die letzte Ebene eines Verzeichnisses zu finden.

Nachdem ich selber darauf gekommen bin, das es sich um ein unbekanntes Verzeichnis handelt, gebe ich dir Recht. Es geht um die von dir 2.te beschriebene Art.

Ich nutze schon FindAllFiles, doch in einer ganz anderen Weise, dachte es würde einfacher gehen....

Eigendlich wäre das nur ein Teil des Gesamten, wo in einem MP3Player von einem File ausgehend, ein Ordner abgespielt, am Ende dann aus dem Ordner in die höhere Ebene in den nächsten Ordner gehen soll und das erste File abspielen soll. Natürlich wenn keine Ordner vorhanden, das nächste File in der höheren Ebene.

Gruß, bluescreen25

Nuclear-Ping 11. Nov 2007 21:45

Re: suche Funktion FindLastDir
 
Naja, in dem Fall weißt du ja den Pfad schon fast.
Du brauchst nur den String an Hand der '\' zerlegen, kriegst daraus alle Teile des Pfades und kannst rückwärts auf die einzelnen Teile eine rekursive Verzeichnissuche machen. Wenn es keine Verzeichnisse in einem Pfad mehr gibt, hast du die letzte Ebenen unter einem jeweiligen Teilpfad.

bluescreen25 12. Nov 2007 14:37

Re: suche Funktion FindLastDir
 
Zitat:

Zitat von Nuclear-Ping
Naja, in dem Fall weißt du ja den Pfad schon fast.
Du brauchst nur den String an Hand der '\' zerlegen, kriegst daraus alle Teile des Pfades und kannst rückwärts auf die einzelnen Teile eine rekursive Verzeichnissuche machen. Wenn es keine Verzeichnisse in einem Pfad mehr gibt, hast du die letzte Ebenen unter einem jeweiligen Teilpfad.

Nee leider nicht, denn wenn ich in einem Ordner abspiele, und es das letzte File war, möchte ich eine Ebene zurück und dort im nächsten Ordner den tiefsten Pfad haben und da kenne ich zu Beginn nur den obersten Pfad.

c:\MP3\Album1\letzterSong.mp3
c:\MP3
c:\MP3\nächstesAlbum\ggfUnterordner\ggfUnterOrdner \erstesFile.mp3 <-- hier würde ich nur c:\Mp3\nächstesAlbum wissen ,aber den letzten Ordner und sogar daraus das erste File wieder abspielen wollen...

hehe...etwas kurios wird aber noch schlimmer:

eine gesetzte oberste Grenze (Pfad) erreicht wie c:\MP3 und als letztes c:\MP3\letztesAlbum\letzterOrdner\letztesFile.mp3 soll dann wiedrum beim ersten Ordner anfangen und dort in die Tiefe gehen und da abspielen...und dann der Ablauf von oben weiter....wobei in der Tiefe abgespielt wird, immer eine Ebene höher und zuletzt auf das nächste Album in die Tiefe...bis wieder alles abgespielt wird....

Ist eine Art CD-Wechsler-Funktion , nur das es etwas komplexer ist, wegen Ordner in der Tiefe, was eine normale CD nicht hat wie C:\MP3\Album1\CD1\*.mp3 und das ggf in jedem Ordner darüber noch Restfiles liegen können sprich in ..\Album1 liegt Ordner \CD1 und ggf noch *.mp3.

Insgesamt wollte ich die Schritte in einzelne Funktionen aufteilen und dann zusammenstellen...

Gruß,bluescreen25


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr.
Seite 1 von 3  1 23      

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