AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Korrekten Dateinamen auslesen

Ein Thema von Martin K · begonnen am 12. Jun 2006 · letzter Beitrag vom 13. Jun 2006
Antwort Antwort
Seite 2 von 3     12 3      
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#11

Re: Korrekten Dateinamen auslesen

  Alt 12. Jun 2006, 22:16
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#12

Re: Korrekten Dateinamen auslesen

  Alt 12. Jun 2006, 22:18
Delphi-Quellcode:
if (s<>'') and (s[1]='"') then
begin
  SL.DelimitedText := s;
  Result := SL[0];
end
else
  Result := s;
Zitat von Martin K:
gibt es evtl. Vorteile in euren Codes gegenüber meinem?
Ja ... der Dateiname muß nicht unbedingt zwischen "" stehen, wenn ein Parameter angehängt wurde,
dieses ist "nur" notwendig, wenn Leerzeichen im Dateinamen sind.

Bei dem Code bleibt der Parameter angehängt, wenn der Dateiname nicht in "" eingeschlossen ist.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Korrekten Dateinamen auslesen

  Alt 12. Jun 2006, 22:27
Zitat von himitsu:
Ja ... der Dateiname muß nicht unbedingt zwischen "" stehen, wenn ein Parameter angehängt wurde,
dieses ist "nur" notwendig, wenn Leerzeichen im Dateinamen sind.

Bei dem Code bleibt der Parameter angehängt, wenn der Dateiname nicht in "" eingeschlossen ist.
Stimmt, Du hast recht
Mal gucken....

Zitat von marabu:
wenn der Delimiter ein Blank ist
Was meint ihr eigentlich mit "blank"?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: Korrekten Dateinamen auslesen

  Alt 12. Jun 2006, 22:34
Zitat:
Was meint ihr eigentlich mit "blank"?
Das ist englisch für Leerzeichen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Korrekten Dateinamen auslesen

  Alt 12. Jun 2006, 22:49
@mkinzler:
Dankle!
...wusste ich nich

So, hier nun mein endgültiger Code, habe mich für himitsu's Methode entschieden:
Delphi-Quellcode:
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;
Sieht ein bisschen komisch aus, mit den ganzen StringReplace's am Schluss.
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...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#16

Re: Korrekten Dateinamen auslesen

  Alt 13. Jun 2006, 08:39
[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 von Martin K:
Hmmm....
Ist doch ein Fehler drin
Und wie äußert der sich?

Zitat von Martin K:
@himitsu:
Wenn ich einen Dateinahmen ohne " " habe und auch ohne Parameter und der Dateinamen enthält Leertasten...
Das geht nicht, ein Dateiname/Pfad mit Leerzeichen muß in "" stehen, wennn er zusammen mit Parametern übergeben werden kann.

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
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: Korrekten Dateinamen auslesen

  Alt 13. Jun 2006, 14:03
Zitat von himitsu:
Das geht nicht, ein Dateiname/Pfad mit Leerzeichen muß in "" stehen, wennn er zusammen mit Parametern übergeben werden kann.
Ja, das ist mir schon klar.

Habe einen Dateinamen ohne " ", mit Leerzeichen aber auch:
Zitat von Martin K:
Wenn ich einen Dateinahmen ohne " " habe und auch ohne Parameter und der Dateinamen enthält Leertasten...
Und da geht es!!!!

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
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#18

Re: Korrekten Dateinamen auslesen

  Alt 13. Jun 2006, 14:29
Zitat von Martin K:
Das funktioniert
Das funktioniert eben nicht, oder doch ...

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.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Korrekten Dateinamen auslesen

  Alt 13. Jun 2006, 15:33
Zitat von himitsu:
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.
Aha.

Zitat von himitsu:
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.
Das stimmt aber nicht
(s. erstes Zitat) ist auch in der Registry bei den Autostart-Programmen möglich
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#20

Re: Korrekten Dateinamen auslesen

  Alt 13. Jun 2006, 15:41
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
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 Uhr.
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