![]() |
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: |
Re: letzen Ordnernamen eines Pfades ermitteln
Hai padavan,
nur mal so ins blaue gedacht:
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. |
Re: letzen Ordnernamen eines Pfades ermitteln
Stimmt!
werd mich nachher gleich mal dran machen. Vielen Dank Padavan (Ergebnisse werd ich posten) |
Re: letzen Ordnernamen eines Pfades ermitteln
Hier ist schon mal meins:
Delphi-Quellcode:
Grüße vom marabu
function Folder(fileName: string): string;
begin Delete(fileName, 1, Length(ExtractFileDrive(fileName))); SetLength(fileName, Length(fileName) - Succ(Length(ExtractFileName(fileName)))); Result := ExtractFileName(fileName); end; |
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; |
Re: letzen Ordnernamen eines Pfades ermitteln
Danke euch,
da zeig ich meinen konfusen, noch nicht funktionierenden Quellcode lieber nicht. :stupid: Gruß Padavan :hi: |
Re: letzen Ordnernamen eines Pfades ermitteln
Zitat:
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) |
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; |
Re: letzen Ordnernamen eines Pfades ermitteln
Siehe Kommentare im Code:
Delphi-Quellcode:
So wie der Code geschrieben wurde, bekommst du immer den String, der zwischen dem ersten und dem letzten Backslash steht (inkl. dem ersten Backslash)
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; |
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 21:52 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 by Thomas Breitkreuz