Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Extrem langen Pfad kürzen, Result leer? (https://www.delphipraxis.net/191317-extrem-langen-pfad-kuerzen-result-leer.html)

a.def 3. Jan 2017 10:09

AW: Extrem langen Pfad kürzen, Result leer?
 
Nach einigen Tests habe ich jetzt herausgefunden, dass Windows intern wohl selbst schon den kurzen Pfad sucht, wenn man \\?\ als Prefix verwendet.
Gestern hat das nicht funktioniert.

Situaton gestern war, dass NtfsDisable8dot3NameCreation aus irgendeinem Grund nicht auf 2 stand.

Folgende Funktion klappt einwandfrei (auch ohne getShortName)
Delphi-Quellcode:
function getUNCPath(aPath: string): string;
var
 bIsUNC: Boolean;
begin
 aPath := ExpandFileName(aPath);

 bIsUNC := Copy(aPath, 1, 2) = '\\';
 if not bIsUNC then
  aPath := '\\?\' + aPath;

 Result := aPath;
end;

Ansonsten sieht mein Wirr-Warr jetzt so aus
Delphi-Quellcode:
function getShortName(sLongName: WideString; bReturnLongIfNotFound: Boolean = False): WideString;
var
 sShortName: WideString;
 nShortNameLen: Integer;
begin
 Result := '';

 // Prüfung auf MAX_PATH. Wenn KLEINER MAX_PATH, gebe sLongName zurück,
 // da es sonst u.U. Zeit kosten kann, wenn die Datei sLongName nicht existiert.
 if Length(sLongName) > MAX_PATH then
  begin
   sShortName := '';
   nShortNameLen := 0;
   nShortNameLen := GetShortPathNameW(PWideChar(sLongName), nil, nShortNameLen);
   if nShortNameLen > 0 then
    begin
     SetLength(sShortName, nShortNameLen);
     nShortNameLen := GetShortPathNameW(PWideChar(sLongName), PWideChar(sShortName), nShortNameLen);

     if nShortNameLen > 0 then
      Result := sShortName;
    end
   else
    begin
    end;
  end
 else
  Result := sLongName;

 // Sollte Result aus irgendeinem Grund leer sein, gebe sLongName zurück (falls gewollt)
 if (Result = '') and bReturnLongIfNotFound then
  Result := sLongName
 else
  Result := sShortName;
end;

// sPath := irgendetwas, das länger als MAX_PATH ist ...
sPath := getUNCPath(sPath); // funktioniert
sPath := getShortName(getUNCPath(sPath), True); // funktioniert

// ohne eine der beiden Funktionen, funktioniert Weiteres (natürlich) nicht


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:37 Uhr.
Seite 3 von 3     123   

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