AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Groß/Kleinschreibung (Pfad) Original erhalten?
Thema durchsuchen
Ansicht
Themen-Optionen

Groß/Kleinschreibung (Pfad) Original erhalten?

Ein Thema von MicMic · begonnen am 18. Aug 2018 · letzter Beitrag vom 1. Okt 2018
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Groß/Kleinschreibung (Pfad) Original erhalten?

  Alt 29. Sep 2018, 20:52
Ne, soviele Unterordner habe ich noch nicht getestet, hier zwei Funktionen um aus nem legitimen 8.3 wieder was langes zurück zu erhalten, ohne FindFirst() aufzurufen.

uses Windows, SysUtils, ActiveX, ShlObj; Was zuviel ist, wirf raus.

Passend zum ersten PIDL Beispiel, hier ein weiteres
Delphi-Quellcode:
function LongPathFromShort(const ShortPath: string): string;
var
  iAttributes: Cardinal;
  iEaten: Cardinal;
  IntfDesktop: IShellFolder;
  IntfMalloc: IMalloc;
  pItemList: PItemIDList;
  sFile: WideString;
  szFile: array[0..MAX_PATH] of Char;
begin
  Result := ShortPath;
  if not FileExists(ShortPath) then
    Exit;
  if Succeeded(SHGetDesktopFolder(IntfDesktop)) then
  begin
    sFile := ShortPath;
    iAttributes := 0;
    if Succeeded(IntfDesktop.ParseDisplayName(0, nil, POleStr(sFile),
      iEaten, pItemList, iAttributes)) then
    begin
      SHGetPathFromIDList(pItemList, szFile);
      Result := szFile;
      SHGetMalloc(IntfMalloc);
      IntfMalloc.Free(pItemList)
    end
  end
end;
Oder lieber per WinApi:
Delphi-Quellcode:
function GetLongName(const APath: string): string;
var
  Buffer: array[0..MAX_PATH] of Char;
  Required: Integer;
begin
  Required := GetLongPathName(PChar(APath), Buffer, Length(Buffer));
  if Required > MAX_PATH then {Buffer too small}
  begin
    SetLength(Result, Required - 1);
    GetLongPathName(PChar(APath), Pointer(Result), Required);
  end
  else if Required = 0 then {Error}
    Result := APath
  else
    SetString(Result, Buffer, Required);
end;

Ich habe es nicht mit extrem langen/tiefen Ordner-Namen getestet, bei mir machts jedenfalls das was es soll, 8.3 entfalten.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: Groß/Kleinschreibung (Pfad) Original erhalten?

  Alt 1. Okt 2018, 15:02
Danke KodeZwerg. Daran hatte ich auch schon gedacht aber wollte mal schauen ob sich's auch gleich lösen lässt. Zum Glück brauch ich dies nur für ein Programmstart. Dann ist es auch nicht so schlimm, wenn sie kurz werden und man sie wieder lang machen muss. Hab die API Version mal kurz getestet. Die andere noch nicht. Grad wenig Zeit für's programmieren. Also vielen Dank für die Hilfe. Micha
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:02 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