Hmm..
Damit geht es:
Delphi-Quellcode:
// nur wenn NtfsDisable8dot3NameCreation=0
function GetShortName(sLongName: WideString): WideString;
var
sShortName: WideString;
nShortNameLen: Integer;
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
raise Exception.Create(SysErrorMessage(GetLastError));
Result := sShortName;
end else begin
raise Exception.Create(SysErrorMessage(GetLastError));
end;
Result := sShortName;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
s : Widestring;
begin
s := '
\\?\D:\0123456789\11111111111111111111111111111111111111111111111111';
s := s + '
\22222222222222222222222222222222222222222222222222';
s := s + '
\33333333333333333333333333333333333333333333333333';
s := s + '
\44444444444444444444444444444444444444444444444444';
s := s + '
\55555555555555555555555555555\Datei.txt';
Edit1.Text := GetShortName(s);
// \\?\D:\012345~1\111111~1\222222~1\333333~1\444444~1\555555~1\Datei.txt
end;
Selbst unter Delphi 6
Bedingt aber, das NtfsDisable8dot3NameCreation=0 gesetzt ist, eventuell VOR dem Erzeugen der Verzeichnisse und der Datei.