![]() |
Delphi-Version: 7
ExtractFilePath aus einem String mit zwei Dateiangaben
Grüße,
Ich möchte gerne aus einem String den Pfad zu einer Datei holen. Das soll ja ganz einfach mit ExtractFilePath aus SysUtils gehn, allerdings enthält mein String auch die zu übergebenden Parameter. Wie kann ich den Pfad der gewünschten Datei holen, wenn in den Parametern Dateien bzw. Pfadangaben zu finden sind? ExtractFilePath("C:\Hello\You.exe C:\Bye\You.exe") returns: "C:\Hello\You.exe C:\Bye\" i want: "C:\Hello\" ps: Es ist nicht gegeben, dass der Dateiname immer mit .exe endet. |
AW: ExtractFilePath aus einem String mit zwei Dateiangaben
Es ist ganz "einfach" Du mußt zuerst die beiden Dateien auftrennen, also den Pfad von den Parametern trennen.
Und dann kannst du mit ExtractFilePath den Dateinamen rausholen. Tipp: Wenn der Pfad mit " anfängt, dann das nächste " suchen und dazwischen ist nun der Pfad. Fängt es nicht mit " an, dann nach dem ersten Leerzeichen suchen und davor steht dann der Pfad. |
AW: ExtractFilePath aus einem String mit zwei Dateiangaben
hmm. Ich komm damit leider noch nicht weiter. Ich weiß nicht wie ich den Dateinamen von den Parametern trennen soll.
Der String könnte schließlich auch so aussehen:
Code:
Ich kann nicht auf Leerzeichen trennen. Ich kann auch nicht auf den Punkt trennen. :\
C:\Hey.Hello There\You.exe C:\Ok.Bye Then\You.exe
|
AW: ExtractFilePath aus einem String mit zwei Dateiangaben
Vorausgesetzt da ist kein Netzwerk-Pfad drin:
Delphi-Quellcode:
uses
StrUtils; procedure TForm1.Button1Click(Sender: TObject); var s, s1, s2: String; p1, p2: Integer; begin s := '"C:\Hello\You.exe C:\Bye\You.exe"'; if Length(s) > 0 then //entfent Anführungszeichen, falls vorhenden if s[1] = '"' then Delete(s, 1, 1); if Length(s) > 0 then //entfent Anführungszeichen, falls vorhenden if s[Length(s)] = '"' then Delete(s, Length(s), 1); p1 := PosEx(':\', s, 0); //Für PosEx StrUtils in uses einfügen p2 := PosEx(':\', s, p1 + 1); if p2 > p1 then begin s1 := Copy(s, 1, p2 - 1); s2 := Copy(s, P2 - 1, MaxInt); end else begin s1 := s; s2 := ''; end; ShowMessage( 'Path1: ' + ExtractFilePath(s1) + ^j + 'Path2: ' + ExtractFilePath(s2)); end; |
AW: ExtractFilePath aus einem String mit zwei Dateiangaben
Man kann auch eine TStringList mit DelimitedText und QuoteChar nehmen. Die macht den ganzen Spaß alleine.
![]() 3. Beispiel:
Delphi-Quellcode:
Ausgabe:
var
cars : TStringList; // Define our string list variable i : Integer; begin // Define a string list object, and point our variable at it cars := TStringList.Create; // Now add some cars to our list - using the DelimitedText property // with overriden control variables cars.Delimiter := ' '; // Each list item will be blank separated cars.QuoteChar := '|'; // And each item will be quoted with |'s cars.DelimitedText := '|Honda Jazz| |Ford Mondeo| |Jaguar "E-type"|'; // Now display these cars for i := 0 to cars.Count-1 do ShowMessage(cars[i]); // cars[i] equates to cars.Strings[i] // Free up the list object cars.Free; end;
Code:
Honda Jazz
Ford Mondeo Jaguar "E-type" |
AW: ExtractFilePath aus einem String mit zwei Dateiangaben
Hallo und herzlich willkommen in der DP! :dp:
ich würde es für einen Anwendungsfall so machen wie himitsu es schon gesagt hat, wenn der Parameter durch ein Leerzeichen eingeleitet wird unfd im Pfad keine Leerzeichen vorhanden sind.
Delphi-Quellcode:
Ich hoffe ich habe jetzt alles richtig getippt.
ExtractFilePath(copy('"C:\Hello\You.exe C:\Bye\You.exe"',
pos(' ', ('"C:\Hello\You.exe C:\Bye\You.exe"')), Length('"C:\Hello\You.exe C:\Bye\You.exe"'))); |
AW: ExtractFilePath aus einem String mit zwei Dateiangaben
Ich hatte vor wenigen Wochen ebenfalls mit diesem Thema zu tun. Erst hatte ich versucht, das alles selbst mit entsprechender Stringbearbeitung zu machen, bis mir irgendwann auffiel, dass Microsoft diese Arbeit schon getan hat. Und da man das Rad nicht immer wieder neu erfinden muss, hab ich dann auf diese Funktionen zurückgegriffen. Stichworte:
![]() ![]() ![]() Es gibt sogar ![]() MfG Dalai |
AW: ExtractFilePath aus einem String mit zwei Dateiangaben
Hallo,
die Regel scheint zu sein, dass bis zum 2. Backslash der Dateipfad ist, oder? Dann vllt. so:
Delphi-Quellcode:
Edit: Sorry, ich hatte beim Überprüfen mit Delphi eben festgestellt, dass ich einen Denkfehler hatte.
s := '"C:\Hello\You.exe C:\Bye\You.exe"';
(ExtractFilePath(copy(s, 2, (posex('\', (s), 5))))); Der jetzige Code sollte funktionieren |
AW: ExtractFilePath aus einem String mit zwei Dateiangaben
Zitat:
Alle ordentlichen Programme, welche Pfade via Parameter übergeben, machen die "..." drumrum, wenn sich Leerzeichen im Pfadnamen befinden. |
AW: ExtractFilePath aus einem String mit zwei Dateiangaben
Vielen Dank für Eure Antworten! :-*
Mit dem Post von Popov konnte ich mein Problem lösen.
Code:
"C:\Hey.Hello There\You.exe C:\Ok.Bye Then\You.exe"
procedure TForm1.CheckBox1Click(Sender: TObject);
var St1: String; Int1, Int2: Integer; begin if CheckBox1.Checked = True then begin if Edit1.Text[1] <> '\' then begin Edit2.Enabled := True; St1 := Edit1.Text; Int1 := PosEx(':\', St1, 0); Int2 := PosEx(':\', St1, Int1 + 1); if Int2 > Int1 then Edit2.Text := ExtractFilePath(Copy(St1, 1, Int2 - 1)) else Edit2.Text := ExtractFilePath(St1); end else Edit2.Text := ExtractFilePath(Edit1.Text); ActiveControl := Edit2; end else begin Edit2.Enabled := False; Edit2.Text := ' override working path...'; end; end; = "C:\Hey.Hello There\" |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 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-2025 by Thomas Breitkreuz