Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Vollen Dateinamen aus 8.3-Format ermitteln (https://www.delphipraxis.net/190802-vollen-dateinamen-aus-8-3-format-ermitteln.html)

Jasocul 9. Nov 2016 11:47


Vollen Dateinamen aus 8.3-Format ermitteln
 
Hallo,

ich habe folgende Situation:
Meine Anwendung ist in das Kontext-Menü des Windows-Explorers (Windows 7) eingebunden.
Es bekommt über den ersten Parameter einen Dateinamen geliefert.

In der Anwendung landet dann der Dateiname im verkürzten 8.3-Format. Auch die enthaltenen Pfade sind derart verkürzt.
Aus HalloWindows7.txt wird HALLOW~1.TXT.

Für die weitere Verarbeitung benötige ich aber die korrekten Pfad- und Datei-Angaben.

Mal abgesehen davon, dass ich nicht verstehe, warum ich den Namen so vom Betriebssystem geliefert bekomme, suche ich eine Funktion, die mir die richtigen Angaben liefert.

Ein wenig Source:
Delphi-Quellcode:
var
  Filename : String;
begin
...
  Filename := ParamStr(1);
  ShowMessage(Filename); // Zeigt nur verkürztes 8.3-Format
...
end;

bra 9. Nov 2016 12:07

AW: Echter Dateiname zu 8.3-Format
 
Dafür gibt es eigene Funktionen, schau mal hier: http://www.delphipraxis.net/1330893-post5.html

DeddyH 9. Nov 2016 12:08

AW: Echter Dateiname zu 8.3-Format
 
Entweder verstehe ich Dich nicht, oder der Threadtitel und die Problembeschreibung sind exakt gegenteilig :-) Wie dem auch sei, ich denke, mit MSDN-Library durchsuchenGetShortPathName bzw. MSDN-Library durchsuchenGetLongPathName sollte das Problem zu beheben sein.

himitsu 9. Nov 2016 12:09

AW: Echter Dateiname zu 8.3-Format
 
MSDN-Library durchsuchenGetShortPathName
MSDN-Library durchsuchenGetFullPathName

Aber auch die kurzen Namen sind "richtige" Dateinamen.

[add] pühh

Jasocul 9. Nov 2016 12:14

AW: Echter Dateiname zu 8.3-Format
 
Danke. Ich hatte einfach nicht den richtigen Suchbegriff für Tante Google.
Natürlich sind beides "richtige" Dateinamen, Himitsu.

Habe jetzt diese Lösung genommen.

@DeddyH:
Habe den Titel mal angepasst, damit es klarer wird.

himitsu 9. Nov 2016 13:15

AW: Echter Dateiname zu 8.3-Format
 
Wie ist dein Programm an den Explorer angebunden? Sobald veraltete APIs oder ANSI-APIs ins Spiel kommen, verfällt Windows machmal gern auf Kompatibilitätsmodi zurück.

Jasocul 9. Nov 2016 13:33

AW: Vollen Dateinamen aus 8.3-Format ermitteln
 
Unter HKEY_CLASSES_ROOT\*\Shell\MeinProgramm\Command habe ich eine Zeichenfolge für mein Programm gemacht.
Innerhalb meines Programms hole ich mir dann nur noch den Eintrag aus dem ersten übergebenen Parameter.

Es gibt keine weiteren API-Aufrufe oder ähnliches.

himitsu 9. Nov 2016 13:38

AW: Vollen Dateinamen aus 8.3-Format ermitteln
 
Gibt ja tausende Möglichkeiten.

Verschiedene Arten der Pfade und Parameter:
abc %1
x:\abc.exe %1
x:\abc.exe "%1"
x:\abc.exe %*
"x:\abc.exe" "%1"
"x:\abc.exe" %*

DDE
OLE
...

Jasocul 9. Nov 2016 13:42

AW: Vollen Dateinamen aus 8.3-Format ermitteln
 
Bei mir steht x:\abc.exe %1

Ich nehme es dann, wie es vom OS geliefert wird.

[EDIT]
Ich habe jetzt deine grüne Variante eingetragen.
Jetzt bekomme ich es, wie von mir gewünscht.

Danke.

himitsu 9. Nov 2016 14:45

AW: Vollen Dateinamen aus 8.3-Format ermitteln
 
Windows macht hier kein " um den Parameter drum, wenn es nötig wäre,
stattdessen gibt es halt den kurzen Pfad, wo keine Leerzeichen drin vorkommen können.

Jasocul 9. Nov 2016 16:21

AW: Vollen Dateinamen aus 8.3-Format ermitteln
 
Nachdem ich die Einträge so gemacht und darüber nachgedacht hatte, konnte ich das nachvollziehen.
Aber wenn man selten mit sowas zu tun hat, braucht man eben den richtigen Schubser. :wink:

himitsu 9. Nov 2016 17:28

AW: Vollen Dateinamen aus 8.3-Format ermitteln
 
Der genaue Grund ist, dass man im Prinzip auch sowas machen kann
Delphi-Quellcode:
meine.exe -input=%1 -output=%2
Es ist halt bissl "ungewöhnlich", dass %1 anders als "%1" oder %* erweitert wird.

%* = alle Parameter
%1 %2 %3 = gezielt nur Einer

Jasocul 10. Nov 2016 06:45

AW: Vollen Dateinamen aus 8.3-Format ermitteln
 
Zitat:

Zitat von himitsu (Beitrag 1353168)
%* = alle Parameter

Wäre für meine Anwendung kontraproduktiv, aber trotzdem gut zu wissen.


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