AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

ExcludeTrailingPathDelimiter defekt

Ein Thema von himitsu · begonnen am 19. Mai 2016 · letzter Beitrag vom 20. Mai 2016
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.596 Beiträge
 
Delphi 10.4 Sydney
 
#1

ExcludeTrailingPathDelimiter defekt

  Alt 19. Mai 2016, 12:36
Delphi-Version: 5
Wieso liefert ExcludeTrailingBackslash/ExcludeTrailingPathDelimiter seit Jahrzehnten ein falschs Ergebnis für Root-Verzeichnisse?

Delphi-Quellcode:
ExtractPath('D:\aaa\bbb') = 'D:\aaa\'
ExtractDir('D:\aaa\bbb') = 'D:\aaa'
ExcludeTrailingPathDelimiter('D:\aaa\') = 'D:\aaa'

ExtractPath('D:\aaa') = 'D:\'
ExtractDir('D:\aaa') = 'D:\'
ExcludeTrailingPathDelimiter('D:\') = 'D:'  // So, nun ist das plötzlich ein relativer Pfad, obwohl er vorher absolut war.

ExtractFileDir(IncludeTrailingPathDelimiter('D:\') + 'dummy') = 'D:\'  // bescheuertste Lösung
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (19. Mai 2016 um 12:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: ExcludeTrailingPathDelimiter defekt

  Alt 19. Mai 2016, 12:53
Der liefert doch nicht das falsche Ergebnis ... sondern da passiert genau das, was der Name verspricht

(Du erwartest da etwas anderes, das mag sein ... allerdings lässt der Name nicht hoffen, dass du hier mit deiner Erwartung richtig liegst)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.596 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: ExcludeTrailingPathDelimiter defekt

  Alt 19. Mai 2016, 14:14
Es geht auch andersrum zu Argumentieren.
* das Ding soll "nur" den "abschließenden" Delimiter entfernen, also den Letzten
* der erste "Delimiter" ist aber kein Delimiter zwischen zwei Verzeichnisnamen, sondern er gibt die Relation an
und schon stimmt der Funktionsname dennoch.
OK, beim alten ExcludeTrailingBackslash sah das noch anders aus.

ExcludeTrailingPathDelimiter(ExtractFilePath('C:\dir\dat.ei')) = ExtractFileDir('C:\dir\dat.ei') ?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (19. Mai 2016 um 14:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: ExcludeTrailingPathDelimiter defekt

  Alt 19. Mai 2016, 14:37
Der PathDelimiter ist der übergeordnete Begriff für Backslash - das ist der PathDelimiter unter Windows.

Also sollten beide unter Windows exakt gleich arbeiten.

Wenn du ExcludeTrailingBackslash richtig deutest, dann sollte das mit ExcludeTrailingPathDelimiter jetzt auch funktionieren

Oder mal anders gesagt:

Diese Funktionen entfernen bei einem string das letzt Zeichen, wenn es sich hierbei um den PathDelimiter (Backslash) handelt. Mehr gibt die Bezeichnung auch nicht her.

Da wird nichts weiter interpretiert.

ExtractPath bzw. ExtractDir interpretieren den Wert dagegen schon hinsichtlich des Root-Eintrags.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (19. Mai 2016 um 14:42 Uhr)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.262 Beiträge
 
Delphi 2006 Professional
 
#5

AW: ExcludeTrailingPathDelimiter defekt

  Alt 19. Mai 2016, 16:25
Der PathDelimiter ist der übergeordnete Begriff für Backslash - das ist der PathDelimiter unter Windows.
Da muss ich Dich leider korrigieren

Unter Windows sind \ und / als Pfadtrennzeichen gleichberechtigt.

z.B.:
C:\DIR\DAT.EI
wird von Windows genauso interpretiert wie:
C:/DIR/DAT.EI
oder auch
C:\/////\\\\\DIR/////\/\DAT.EI
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: ExcludeTrailingPathDelimiter defekt

  Alt 19. Mai 2016, 16:47
Das ist doch nicht schlimm ...

... Delphi hängt unter Windows den Backslash als PathDelimiter dran.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.596 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: ExcludeTrailingPathDelimiter defekt

  Alt 19. Mai 2016, 18:10
Das Problem ist halt, dass C:\DIR\DAT.EI nicht gleich C:DIR\DAT.EI ist, bzw. C: ist nicht C:\
Denn der erste "Pathdelimiter" hat halt eine etwas "andere" Funktion.

Genau so, wie bei einer URL die ersten beiden // auch keine Pathdelimiter sind, bzw. die gehören nichtmal zum Pfad. (sind quasi die Trennzeichen zwischen Protokoll und Pfad/Daten)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: ExcludeTrailingPathDelimiter defekt

  Alt 19. Mai 2016, 18:31
Wenn man es ganz genau nimmt, dann gibt es ein (oder mehrere) Zeichen, die ein PathDelimiter sind.

Das ist einfach mal so.

Jetzt gibt es aber für diese PathDelimiter innerhalb eines bestimmten Kontext unterschiedliche Bedeutungen. Diese Bedeutungen erschließen sich allerdings auch erst durch den Kontext und nicht einfach durch eine einzelne Betrachtung des Zeichens.

Da IncludeTrailingPathDelimiter und IncludeTrailingBackslash diesen Kontext nicht beachten du aber etwas benötigst, dass den Kontext beachtet gilt schon mal Folgendes:
Zitat:
Das sind nicht die Droiden die Ihr sucht!
Gib doch mal eine Liste der Eingaben und der gewünschten Ausgaben vor, dann findet sich auch die Funktion dazu.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#9

AW: ExcludeTrailingPathDelimiter defekt

  Alt 20. Mai 2016, 00:04
Ich würde SirRufo zustimmen: Vom Namen her ist das Ding ist eine Stringfunktion, die nichts über Semantik weiß.
Der Artikel hier ist vielleicht ganz interessant für dich.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
8.096 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: ExcludeTrailingPathDelimiter defekt

  Alt 20. Mai 2016, 04:10
Nun, eine Standardverwendung ist z.B. Zum Zusammenbauen eines Verzeichnis-Strings.
Wenn die Funktionen da nicht immer gleich funktionieren würden, kämen ggf. Verzeichnisse mit doppelten Pfadtrennzeichen usw. heraus.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 06:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf