Las
RxLib, en la unit
FileUtil.pas tienen la siguiente función, que tal vez te sea útil (te pongo la 4):
Código Delphi
[-]
function ShortToLongFileName(const ShortName: string): string;
var
Temp: TWin32FindData;
SearchHandle: THandle;
begin
SearchHandle := FindFirstFile(PChar(ShortName), Temp);
if SearchHandle <> INVALID_HANDLE_VALUE then begin
Result := string(Temp.cFileName);
if Result = '' then Result := string(Temp.cAlternateFileName);
end
else Result := '';
Windows.FindClose(SearchHandle);
end;
function LongToShortFileName(const LongName: string): string;
var
Temp: TWin32FindData;
SearchHandle: THandle;
begin
SearchHandle := FindFirstFile(PChar(LongName), Temp);
if SearchHandle <> INVALID_HANDLE_VALUE then begin
Result := string(Temp.cAlternateFileName);
if Result = '' then Result := string(Temp.cFileName);
end
else Result := '';
Windows.FindClose(SearchHandle);
end;
function ShortToLongPath(const ShortName: string): string;
var
LastSlash: PChar;
TempPathPtr: PChar;
begin
Result := '';
TempPathPtr := PChar(ShortName);
LastSlash := StrRScan(TempPathPtr, '\');
while LastSlash <> nil do begin
Result := '\' + ShortToLongFileName(TempPathPtr) + Result;
if LastSlash <> nil then begin
LastSlash^ := char(0);
LastSlash := StrRScan(TempPathPtr, '\');
end;
end;
Result := TempPathPtr + Result;
end;
function LongToShortPath(const LongName: string): string;
var
LastSlash: PChar;
TempPathPtr: PChar;
begin
Result := '';
TempPathPtr := PChar(LongName);
LastSlash := StrRScan(TempPathPtr, '\');
while LastSlash <> nil do begin
Result := '\' + LongToShortFileName(TempPathPtr) + Result;
if LastSlash <> nil then begin
LastSlash^ := char(0);
LastSlash := StrRScan(TempPathPtr, '\');
end;
end;
Result := TempPathPtr + Result;
end;