![]() |
Re: Korrekten Dateinamen auslesen
Hallo Hawkeye,
das einzige, was dagegen spricht, ist die Berufsehre - wir sollen weder Nebeneffekte erzeugen, noch sollen wir sie in unseren Programmen nutzen. Der Nebeneffekt hier ist, dass der Parser mehrfach aufeinander folgende Blanks wie eines betrachtet, wenn der Delimiter ein Blank ist. Aber verführerisch einfach ist es schon ... Gute Nacht marabu |
Re: Korrekten Dateinamen auslesen
Delphi-Quellcode:
if (s<>'') and (s[1]='"') then
begin SL.DelimitedText := s; Result := SL[0]; end else Result := s; Zitat:
dieses ist "nur" notwendig, wenn Leerzeichen im Dateinamen sind. Bei dem Code bleibt der Parameter angehängt, wenn der Dateiname nicht in "" eingeschlossen ist. |
Re: Korrekten Dateinamen auslesen
Zitat:
Mal gucken.... Zitat:
|
Re: Korrekten Dateinamen auslesen
Zitat:
|
Re: Korrekten Dateinamen auslesen
@mkinzler:
Dankle! ...wusste ich nich :oops: So, hier nun mein endgültiger Code, habe mich für himitsu's Methode entschieden:
Delphi-Quellcode:
Sieht ein bisschen komisch aus, mit den ganzen StringReplace's am Schluss.
function StrToPath(const s: String): String;
var i: Integer; b: Boolean; begin i := 1; b := False; while (i <= Length(s)) and ((s[i] <> ' ') or b) do begin if s[i] = '"' then b := not b; Inc(i); end; Result := StringReplace(Trim(Copy(s, 1, i-1)), '"', '', [rfReplaceAll]); Result := StringReplace(Result, '/', '\', [rfReplaceAll]); Result := StringReplace(Result, '\\', '\', [rfReplaceAll]); end; Aber warum eigentlich nicht... :) Hmmm.... Ist doch ein Fehler drin :!: @himitsu: Wenn ich einen Dateinahmen ohne " " habe und auch ohne Parameter und der Dateinamen enthält Leertasten... |
Re: Korrekten Dateinamen auslesen
[quote="Martin K"]Du kannst zwar alle StringReplace zusammensetzten, aber ersten kommes etwa auf's Selbe raus und zweitens ist das bestimmt nicht gerade übersichtlich.
Zitat:
Zitat:
Denn nur zwischen zwei " ist das Leerzeichen ein Leerzichen ... außerhalb ist es ein Trennzeichen. Also wenn du es ohne die " übergibst, dann wird er an den Leerzeichen getrennt, - Übergabe: TestDatei mit Leerzeichen.irgendwas der Paramter Nocheiner - Dateiname: TestDatei - Parameter 1: mit - Parameter 2: Leerzeichen.irgendwas - Parameter 3: der - Parameter 4: Paramter - Parameter 5: Nocheiner statt - Übergabe: "TestDatei mit Leerzeichen.irgendwas" "der Paramter" Nocheiner - Dateiname: TestDatei mit Leerzeichen.irgendwas - Parameter 1: der Paramter - Parameter 2: Nocheiner |
Re: Korrekten Dateinamen auslesen
Zitat:
Habe einen Dateinamen ohne " ", mit Leerzeichen aber auch: Zitat:
Beispiel: C:\Programme\Intel\Intel Matrix Storage Manager\IAAnotif.exe Das funktioniert :!: Aber ich habe das schon anders gelöst: Wie gesagt, es ging ja um die Icons der Dateien. Ich prüfe einfach zuerst den Originaldateinamen, erst wenn mir der kein gültiges Icon zurückliefert (HICON = 0), dann wende ich den Code an. Dazu habe ich die letzten beiden StringReplace aus Beitrag #15 noch vor den restlichen Code gesetzt und dann nochmals auf ein gültiges Icon überprüft, denn ein Dateiname ohne " " und ohne Parameter kann ja auch Doppelslashes \\ beinhalten :wink: |
Re: Korrekten Dateinamen auslesen
Zitat:
es kommt halt darauf an, wie dieser String definiert ist ... bei dem was in der Registry (Autostart) steht, muß jeder Dateiname, welcher Leerzeichen enthält, in " eingeschlossen sein. Wärend andere Dinge (z.B. die Funktionen, womit man z.B. sich das Icon der Datei zurückgeben lassen kann, nur einen reinen Dateinamen haben wollen und das ohne die ". Denn wenn in dem String nur der Name enthalten ist und dort Parameter "verboten" sind, dann braucht man diese " nicht, da sie nur in den Strings wo Parameter enthalten sein können zur Kennzeichnung diehnen, ob ein Leerzeichen ein Leerzeichen, oder ein Trennzeichen ist. |
Re: Korrekten Dateinamen auslesen
Zitat:
Zitat:
(s. erstes Zitat) :arrow: ist auch in der Registry bei den Autostart-Programmen möglich :!: |
Re: Korrekten Dateinamen auslesen
Na ja, denn liegt es halt wohl daran, dat Windows hier mal wieder die Fehler der Pogrammierer behebt.
(wenn ich windows wäre, dann würde ich dann ganz einfach nichts machen) Es ist dennoch nicht sehr gut, wenn man irreguläre "Fehler" ausnutzt ... erstens ist es nicht gerade schön und dann könnte M$ auch irgendwann mal diese "Fehlerkorrektur" weglassen ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 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