ChakAll, gracias por tu interés, lo primero.
La situación está así con GetShortPathName:
en XP Pro y en Vista64 da error cuando le pides la ruta desde un subdirectorio que hace el número 5 ó más con las mismas 9 ó más letras iniciales iguales.
en ME no da ningún problema, he comprobado hasta con 12 subdirectorios, uno a uno.
Para mi caso particular está resuelto el problema desde el principio, pues en la instalación del programa, no permito cambiar la ruta y no es muy probable que haya 5 subdirectorios parecidos al mío, pero no me deja satisfecho el "gusanillo" ése que nos obliga a ser perfeccionistas...
Aunque pierda un poco de mi tiempo, intentaré con FindFirstFile del API y ya te conteré.
Te pego a continuación la función que utilizo en un proyecto de prueba para que la revises o la pruebes con otro sistema para ver lo de los 5 directorios.
Function Ruta:string;
var
RutaCorta:String;
DirActual:String;
corto:array [0..MAX_PATH] of char;
longitud:Cardinal;
begin
GetDir(0,DirActual);
Longitud:= Sizeof(Corto) -1;
GetShortPathName(PChar(DirActual),@corto,Longitud);
RutaCorta:=String(Pchar(@corto));
if Length(RutaCorta)>3 then Ruta:=RutaCorta+'\'
else Ruta:=RutaCorta; // si es el Dir Raiz C:\ ó A:\ la barra la pone sola
end;
y después la llamo desde un botón y lo escribo en un Edit
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.text:=Ruta;
end;
|