Obtener el nombre largo de una ruta a partir de su nombre corto

2483 vistas

¿Cómo encontrar el nombre largo de una carpeta o un fichero a partir de su nombre corto (8 carácteres + extensión en formato DOS o Windows 16 bits)?

La función GetLongFilename devuelve el nombre largo de una ruta usando la Shell. Si el nombre no puede ser obtenido devolverá el nombre corto pasado como parámetro.



delphi
  1. uses
  2.   ShlObj, Windows;
  3.  
  4. function GetLongFilename(const ShortFilename: string): string;
  5. var
  6.   desktop: IShellFolder;
  7.   filename: Widestring;
  8.   pchEaten: Cardinal;
  9.   ppIdl: PItemIDList;
  10.   pdwAttributes: Cardinal;
  11.   buffer: array [0..MAX_PATH] of char;
  12. begin
  13.   result:= ShortFilename;
  14.   if SHGetDesktopFolder(desktop) = NOERROR then
  15.   begin
  16.     filename:= ShortFilename; { Conversion en WideString }
  17.     if Desktop.ParseDisplayName(0, nil, PWideChar(filename),
  18.                   pchEaten, ppidl, pdwAttributes) = NOERROR then
  19.     begin
  20.       if SHGetPathFromIDList(ppidl, buffer) then
  21.         result:= buffer;
  22.     end;
  23.   end;
  24. end;



Nota: para obtener el inverso, es decir, el nombre corto a partir del largo, podemos usar la función ExtractShortPathName disponible en la unidad SysUtils a partir de Delphi 4.