Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   letzen Ordnernamen eines Pfades ermitteln (https://www.delphipraxis.net/55875-letzen-ordnernamen-eines-pfades-ermitteln.html)

padavan 28. Okt 2005 06:21


letzen Ordnernamen eines Pfades ermitteln
 
Moin,

wie komm ich eigentlich an den letzten Ordner eines Pfades dran?

z.B.
Pfad:
c:\test\Gruppierung1\dateinamen_n.txt
ich möchte haben:
"Gruppierung1"

Habe sowas schonmal gebraucht und auch hinbekommen, allerdings hatte der letzte Ordnername eine festdefinierte Länge, und somit war´s einfach. Aber was, wenn der letzte Ordnername keine feste Länge hat?

:roll:

Sharky 28. Okt 2005 06:31

Re: letzen Ordnernamen eines Pfades ermitteln
 
Hai padavan,

nur mal so ins blaue gedacht:
  • Die Ordnerstruktur ist durch ein abschliessenden \ vom Dateinamen getrennt.
  • Jeder Ordner ist durch ein \ vom anderen getrennt
  • Das "root-laufwerk" ist durch ein :\ von den Ordnern getrennt

Du musst also nur den letzen Backslash suchen und vor dort(nach links) bis zum nächsten Backslash suchen.
Wenn in dem String nur ein \ vorkommt steht in ihm eine Datei des root.

padavan 28. Okt 2005 06:40

Re: letzen Ordnernamen eines Pfades ermitteln
 
Stimmt!
werd mich nachher gleich mal dran machen.

Vielen Dank
Padavan

(Ergebnisse werd ich posten)

marabu 28. Okt 2005 07:13

Re: letzen Ordnernamen eines Pfades ermitteln
 
Hier ist schon mal meins:

Delphi-Quellcode:
function Folder(fileName: string): string;
begin
  Delete(fileName, 1, Length(ExtractFileDrive(fileName)));
  SetLength(fileName, Length(fileName) - Succ(Length(ExtractFileName(fileName))));
  Result := ExtractFileName(fileName);
end;
Grüße vom marabu

DevilsCamp 28. Okt 2005 07:22

Re: letzen Ordnernamen eines Pfades ermitteln
 
Marabus Lösung ist kürzer als meine, aber ich will sie trotzdem nicht vorenthalten:

Delphi-Quellcode:
function GetLastDirFromPath(const Pfad: String): String;
var
  i : Integer;
  j : Integer;
  s : String;
begin
  i := 1;
  j := 1;
  s := ExtractFilePath(Pfad);
  Delete(s, Length(s), 1); // Abschliessendes \ entfernen

  // Und jetzt nach einem \ suchen, bis man das letzte hat
  // Dazu wird die Position des vorhergehenden gesichert
  while (i>0) do
  begin
    j := i;
    i := PosEx('\', s, i+1); // function PosEx(SubStr, S: String; Offset: Integer = 1): Integer;
                             // Sucht SubStr in S ab Position Offset
                             // Ergebnis: Wenn (SubStr nicht gefunden wurde)or(Offset>Length(s))or(Offset<1) dann 0 sonst (Position von SubStr)
                             // Für PosEx muss die Unit StrUtils eingebunden werden
  end;

  Result := Copy(s, j+1, Length(s));
end;

padavan 28. Okt 2005 07:37

Re: letzen Ordnernamen eines Pfades ermitteln
 
Danke euch,
da zeig ich meinen konfusen, noch nicht funktionierenden Quellcode lieber nicht.

:stupid:


Gruß
Padavan
:hi:

Sharky 28. Okt 2005 07:42

Re: letzen Ordnernamen eines Pfades ermitteln
 
Zitat:

Zitat von padavan
... noch nicht funktionierenden Quellcode lieber nicht. ...

Hai padavan,

Du solltest aber trotzdem versuchen deinen Code zum laufen zu bekommen. Es hilft auf dauer ja nicht fertigen Code zu verwenden weil man in seinem eigenen Fehler hat ;-)

(Darum habe ich ja auch keinen fertigen Code gezeigt sondern nur einen Weg wie man es lösen kann)

padavan 28. Okt 2005 08:03

Re: letzen Ordnernamen eines Pfades ermitteln
 
das stimmt, nur nachdem ich angefangen hab und mittendrin eine Antwort erhielt, wäre ich jetzt beeinflusst.
Was um Himmels willen nicht heißen soll, dass ich keine Antworten mehr haben will.
:mrgreen:

das war meins (aber noch nicht fertig und verworfen, marabus´s gefällt mir einfach besser, egal ob ich meines zum Laufen bring)

Delphi-Quellcode:
function gibletztenOrdner(komplett: String): String;  // es muss der ganze Pfad mit Dateiname übergeben werden
var                                                   //
    Teilstring: String;
    p1: integer;
    p2: integer;
    c: integer;
    i: integer;
    Ergebnis: String;
begin
{
  'c:\test\Gruppe1\Datei.txt'
                  p2-letzter Backslash
          p1-vorletzter Backslash
          |---c---|
}

  for i := 0 to length(komplett) - 1 do begin
    p1 := pos('\',komplett);                               // liefert vorletzten Backslash

//hier fehlt noch was...

  end;



  p2 := pos('\' + extractfilename(komplett),komplett);   // liefert letzten Backslash
  c := p2 - P1;

  Ergebnis := copy(komplett,p1,c);
  result := Ergebnis;
end;

DevilsCamp 28. Okt 2005 08:21

Re: letzen Ordnernamen eines Pfades ermitteln
 
Siehe Kommentare im Code:

Delphi-Quellcode:
function gibletztenOrdner(komplett: String): String;  // es muss der ganze Pfad mit Dateiname übergeben werden
var                                                   //
    Teilstring: String;
    p1: integer;
    p2: integer;
    c: integer;
    i: integer;
    Ergebnis: String;
begin
{
  'c:\test\Gruppe1\Datei.txt'
                  p_2-letzter Backslash
          p_1-vorletzter Backslash
          |---c---|
}

  for i := 0 to length(komplett) - 1 do begin
    p1 := pos('\',komplett);                               // liefert vorletzten Backslash


// Da du immer den gesamten String überprüfst, wirst du immer den ERSTEN Backslah finden (DevilsCamp)
// Kleiner Tip: Gehe die Schleife von Length(komplett) bis 1 runter und Prüfe, ob komplett[i]='\'. Sicher dann die Position des zweiten '\'



//hier fehlt noch was...

  end;



  p2 := pos('\' + extractfilename(komplett),komplett);   // liefert letzten Backslash

// Das liefert tatsächlich die Position des letzten Backslashs (DevilsCamp)

  c := p2 - P1;

  Ergebnis := copy(komplett,p1,c);
// Hier würde das vorletzte \ mit im Ergebnis stehen. Wenn dies aber mit im Ergebnis sein soll, dann ist es richtig (DevilsCamp)
  result := Ergebnis;
end;
So wie der Code geschrieben wurde, bekommst du immer den String, der zwischen dem ersten und dem letzten Backslash steht (inkl. dem ersten Backslash)

padavan 28. Okt 2005 08:38

Re: letzen Ordnernamen eines Pfades ermitteln
 
Danke für den Tipp,
ich versuch´s dann nochmal.
Bin ja froh, dass du noch halbwegs den Ansatz im meinem Codefetzen erkannt hast...
:-D

Padavan


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:03 Uhr.
Seite 1 von 2  1 2      

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