Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Was macht ExpandFileName? (https://www.delphipraxis.net/194240-macht-expandfilename.html)

Glados 1. Nov 2017 18:50

Delphi-Version: 5

Was macht ExpandFileName?
 
Ich stehe gerade etwas auf dem Schlauch, als ich ExpandFileName() an einer Stelle im Code gefunden habe.
Die Funktion wird an einer Stelle aufgerufen, wo ich zu 100% immer nur absolute Pfade übergebe.

Was genau bewirkt ExpandFileName dann dort? Und kann es raus?

sakura 1. Nov 2017 18:57

AW: Was macht ExpandFileName?
 
Zitat:

Zitat von Glados (Beitrag 1384757)
Die Funktion wird an einer Stelle aufgerufen, wo ich zu 100% immer nur absolute Pfade übergebe.

Aus der Hilfe:
Zitat:

ExpandFileName converts the relative file name into a fully qualified path name. ExpandFileName does not verify that the resulting fully qualified path name refers to an existing file, or even that the resulting path exists.
Also, wenn Du weißt, dass Du an dieser Stelle nur absolute Pfade hast, dann kannst Du Dir den Aufruf sparen, aber evtl. gab es doch einmal einen guten Grund für die Funktion an der Stelle...? Schaden sollte der Aufruf nicht, außer es geht um Massenverarbeitung und Geschwindigkeit.

...:cat:...

Glados 1. Nov 2017 18:59

AW: Was macht ExpandFileName?
 
Wenn ich aber einen relativen Pfad habe, woher kommt dann der absolute? Wird dann in der NTFS-Tabelle nachgeguckt?

Ich weiß gerade nicht mal, was ein relativer Pfad unter Windows sein soll. Eventuell \Test\Path\File.exe statt D:\Test\Path\File.exe ?

bnreimer42 1. Nov 2017 19:11

AW: Was macht ExpandFileName?
 
Ein relativer Pfad (beginnt mit .\ oder ..\) ist relativ zum Working Directory oder aktuellen Verzeichnis.
Wenn Du nichts tust, ist das das aktuelle Verzeichnis das, in dem die EXE-Datei liegt beim Start.

Was ExpandFileName macht, sagt doch die Hilfe ganz klar:

Zitat:

ExpandFileName konvertiert einen relativen Dateinamen in einen vollständigen Pfadnamen, indem dem Dateinamen das aktuelle Verzeichnis und das aktuelle Laufwerk hinzugefügt werden.

Hobbycoder 1. Nov 2017 19:11

AW: Was macht ExpandFileName?
 
Es gibt ja SetCurrentDir bzw. GetCurrentDir.
Damit kannst du das aktuelle Verzeichnis festlegen bzw. auslesen.

z.B: könnte der CuurenDir ja = C:\Users\User sein

Dann währe ein Pfad "Desktop\MeinOrdner\" ein relativer Pfad, weil er der Inhalt relativ zum CurrentDir ist.

Der dazugehörige absolute Pfad wäre "C:\Users\User\Desktop\MeinOrdner".

Dalai 1. Nov 2017 19:13

AW: Was macht ExpandFileName?
 
Ein relativer Pfad ist z.B. system32\shell32.dll oder auch Windows\system32\kernel32.dll. ExpandFileName macht daraus einen absoluten Pfad, IIRC basierend auf dem aktuellen Arbeitsverzeichnis. ExpandFileName prüft NICHT, ob der zusammengebaute zurückgegebene absolute Pfad auf eine existierende Datei verweist - wie schon im von sakura geposteten Hilfeauszug zu lesen.

Grüße
Dalai

Glados 1. Nov 2017 19:13

AW: Was macht ExpandFileName?
 
Solche Pfade verwende ich nicht. Dann kann ich ExpandFileName ja rausschmeißen. Der Geschwindigkeitsvorteil durch das Weglassen ist vernachlässigbar.

nahpets 1. Nov 2017 19:16

AW: Was macht ExpandFileName?
 
Code:
c:\temp\dateiname.ext -> absoluter Pfad.

.\Dateiname.ext -> relativer Pfad, im gleichen Verzeichnis, in dem wir uns befinden, also z. B. das Arbeitsverzeichnis eines Programmes.
1. ist klar.

2.
Delphi-Quellcode:
ExtractFilePath(Application.Exename) + Copy('.\Dateiname.ext',2,Length('.\Dateiname.ext');

Dürfte (in etwa)
Delphi-Quellcode:
ExpandFileName('.\Dateiname.ext')
entsprechen, mit dem Unterschied: ExpandFileName bildet alle weiteren Möglichkeiten von relativen Pfaden mit ab, die man sonst einzeln "nachprogrammieren" müsste.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:52 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