![]() |
Letztes Verzeichnis im String ermitteln
Dieser Code hier ist vermutlich schon seit 10 Jahren in meiner pas-Datei und wurde seitdem auch nicht verändert.
Ich würde euch gerne fragen, ob dieses Vorhaben besser umsetzbar ist. Bitte nicht hauen, der Code ist uralt und echt nicht gut.
Delphi-Quellcode:
function GetLastDirectory(Directory: string): string;
var tmpSrcPath: string; begin Directory := Trim(Directory); if Directory = '' then Exit; tmpSrcPath := Directory; if EndsStr('\', tmpSrcPath) then tmpSrcPath := Copy(tmpSrcPath, 1, Length(tmpSrcPath) - 1); if Pos(':', tmpSrcPath) > 0 then tmpSrcPath := StringReplace(tmpSrcPath, ':', '', [rfReplaceAll]); if Trim(tmpSrcPath) <> '' then Result := Copy(tmpSrcPath, LastDelimiter('\', tmpSrcPath) + 1, Length(tmpSrcPath)) else Result := ''; end; |
AW: Letztes Verzeichnis im String ermitteln
Würde ich heute so schreiben:
Delphi-Quellcode:
Müsste man vielleicht noch mit den realen Randbedingungen testen (z.B. Pfade mit Punkten, nur Laufwerk usw.)uses System.SysUtils, System.IOUtils; ... function GetLastDirectory(const Directory: string): string; begin Result := TPath.GetFileName(ExcludeTrailingPathDelimiter(Directory)) end; |
AW: Letztes Verzeichnis im String ermitteln
TPath.GetFullPath
|
AW: Letztes Verzeichnis im String ermitteln
![]() Was hat GetFullPath damit zu tun, wenn man das letzte Verzeichnis ermitteln möchte? |
AW: Letztes Verzeichnis im String ermitteln
Zitat:
|
AW: Letztes Verzeichnis im String ermitteln
Ich weiß nicht warum, aber deine Antworten werfen immer mehr Fragen auf als dass sie helfen. Irgendwo natürlich schön, weil man ja auch nachdenken soll.
Das ist natürlich in einem Forum hilfreich (zu einem gewissen Maße). Ich verstehe aber nicht, was TPath.GetFullPath mit irgendwelchen Tests zu tun haben soll. Oder soll es nicht? Wenn ich das testen möchte, schreibe ich einfach TestFunktionXYZ('F:\') usw. |
AW: Letztes Verzeichnis im String ermitteln
Bestimmt nicht die beste Lösung, aber scheint zu funktionieren:
Delphi-Quellcode:
function GetLetztesVerzeichnis(s : String) : String;
begin s := ExcludeTrailingPathDelimiter(ExtractFilePath(s)); s := ReverseString(s); s := Copy(s,1,Pos('\',s) - 1); Result := ReverseString(s); end; |
AW: Letztes Verzeichnis im String ermitteln
Es gibt z.B. Probleme mit relativen Pfaden, bei solchem Vorgehen.
Zitat:
Pos/PosEx in einer Schleife (immer noch schneller, als ein/zwei mal ReverseString) Wobei das zweite ReverseString garnicht nötig ist, wenn man die gefundene Position mit Length verrechnet, um direkt aus dem originalen String zu kopieren, aber ![]() ![]() oder, wie es Uwe bereits zeigte, also Pfadnamenfunktionen, zum Extrahieren des letzten Namen. :angle: |
AW: Letztes Verzeichnis im String ermitteln
Auch eine Alternative:
Delphi-Quellcode:
var arr := tmpSrcPath.Split(['\', ':']); // oder auch SplitString
Result := arr[High(arr)]; |
AW: Letztes Verzeichnis im String ermitteln
Da unter Windows als Pfadtrenner Slash (/) und Backslash (\) zulässig sind
und das auch in beliebiger Anzahl hintereinander habe ich mir sowas erstellt:
Delphi-Quellcode:
Im Explorer funktioniert das mit den gemischten und mehreren Pfadtrennern
function csExcludeTrailingPathDelimiterWin(const AsInput : string) : string;
var i : integer; begin Result := AsInput; i := length(AsInput); if i = 0 then exit; while CharInSet(AsInput[i],['\','/']) do dec(i); Result := Copy(AsInput,1,I); end; zwar nicht, aber in der Console. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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