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. |
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