Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Pfadangabe mit "..\" richtig verarbeiten - Suche Funktion (https://www.delphipraxis.net/51599-pfadangabe-mit-%5C-richtig-verarbeiten-suche-funktion.html)

Thomas233 15. Aug 2005 22:00


Pfadangabe mit "..\" richtig verarbeiten - Suche F
 
Hallo und guten Abend,

ich bräuchte eine Funktion die sowas wie den Pfad "C:\test\..\test1.dat" in "C:\test\test.dat" umwandelt, d.h. den gegebenen Pfad so verarbeitet das ich dann mit Delphi daraus eine Datei öfnnen kann (den ersten Beispielpfad kapiert Delphi ja leider nicht).

Angeblich gibt`s dafür irgendeine WinApi-Funktion, ich habe aber k.a. wie die heisst.

Ich würde mich über eine Antwort sehr freuen da mir dazu echt nichts mehr einfällt. Vielen Dank im Vorraus !

Liebe Grüße,
Thomas

jfheins 15. Aug 2005 22:32

Re: Pfadangabe mit "..\" richtig verarbeiten - Suc
 
Versuch mal ExpandFileName():

showmessage (ExpandFileName('C:\testdir1\..\testdir2\test.dat' )) >>> C:\testdir2\test.dat

Das sollte deinen Zweck erfüllen ;)

Thomas233 15. Aug 2005 22:48

Re: Pfadangabe mit "..\" richtig verarbeiten - Suc
 
He, dich kennt man doch *g* ;-)

Ne, also ich dachte eigentlich die ExpandFileName-Funktion wäre dazu da um aus kurzen Dateipfaden lange zu machen, ich wusste aber nicht das die auch solche Pfadangaben mit den Punkterln (verrat mir einen Fachbegriff dafür) verarbeiten kann, hätte da eigentlich mehr an das berühmte "~" gedacht.

Naja, sei`s drum, was geht das geht, danke...

Vielen Dank und gutes Nächtle !

Olli 15. Aug 2005 22:59

Re: Pfadangabe mit "..\" richtig verarbeiten - Suc
 
Also ich wüßte nicht, daß es dafür eine API-Funktion gibt.

Suchst du das für kurze 8.3-Dateinamen? Dann ist's MSDN-Library durchsuchenGetShortPathName

Luckie 15. Aug 2005 23:11

Re: Pfadangabe mit "..\" richtig verarbeiten - Suc
 
Also das verhält sich so: Mit Delphi-Referenz durchsuchenMinimizeFilename kann man einen Pfad kürzen, damit er in einen bestimmten Bereich passt.
Zitat:

Shortens a fully qualified path name so that it can be drawn with a specified length limit.
Dies ist aber nur zur Darstellung geeignet, das der vollständige Pfad niergens abgelegt wird. Wieder zurück geht es also nicht. Man müsste ihn sich also selber irgendwo merken.

Will amn diese VCL Funktiopn nicht nutzen, kann man den Pfad auch noch mit MSDN-Library durchsuchenDrawText und dem Flag DT_PATH_ELLIPSIS von Hand ausgeben. Oder man benutzet ein Static Control und gibt ihm den Stil SS_PATHELLIPSIS, dieser Stil ist aber nur ab Windows NT und höher verfügbar:
Zitat:

Windows NT or later: Replaces characters in the middle of the string with ellipses so that the result fits in the specified rectangle. If the string contains backslash (\) characters, SS_PATHELLIPSIS preserves as much as possible of the text after the last backslash.
Kurz: Die Umkehrung ist nicht möglich.

ExpandFilename versucht dies zwar, funktioniert aber nur seh bedingt:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  Path = 'e:\Delphi\..\Project1.exe';
begin
  ShowMessage(ExpandFileName(Path));
end;
Daraus wird zum Beispiel: 'e:\Project1.exe'.

Dann gibt es noch MSDN-Library durchsuchenGetShortPathname. welches aus einem langen Dateinamen den entsprechenden DOS dateinamen generiert und MSDN-Library durchsuchenGtFullPathName, welches aus den DOS Dateinamen wieder den langen Dateinamen generiertr. Dies funktioniert aber nur, wenn man die Kurzendateienmanen unter NTFS nicht deaktiviert hat aus Performancegründen und der Pfad nicht länger als 67 Bytes ist:
Zitat:

When an application calls this function and specifies a path on a volume that does not support 8.3 aliases, the function fails with ERROR_INVALID_PARAMETER if the path is longer than 67 bytes.

Olli 15. Aug 2005 23:14

Re: Pfadangabe mit "..\" richtig verarbeiten - Suc
 
Ich denke, daß er vielmehr den effektiven Pfad sucht. Der effektive Pfad von C:\.\Otto\..\boot.ini ist nämlich C:\boot.ini - ich hoffe du verstehst was ich meine. Allerdings wüßte ich dafür keine Funktion.

CLRS530 16. Aug 2005 10:05

Re: Pfadangabe mit "..\" richtig verarbeiten - Suc
 
Zitat:

Zitat von Olli
Ich denke, daß er vielmehr den effektiven Pfad sucht. Der effektive Pfad von C:\.\Otto\..\boot.ini ist nämlich C:\boot.ini - ich hoffe du verstehst was ich meine. Allerdings wüßte ich dafür keine Funktion.


2. Post, da hat es sich schon geklärt ;)

Zitat:

Zitat von jfheins
Versuch mal ExpandFileName():

showmessage (ExpandFileName('C:\testdir1\..\testdir2\test.dat' )) >>> C:\testdir2\test.dat

Das sollte deinen Zweck erfüllen


Thomas233 30. Aug 2005 22:10

Re: Pfadangabe mit "..\" richtig verarbeiten - Suc
 
Danke, ExpandFileName hat geholfen -> erledigt !

Vielen Dank nochmal !

Mit freundlichen Grüßen,
Thomas Tschofenig


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