Hola,
A raíz de
este hilo me he propuesto realizar una sencilla clase que cuenta solo con un método cuyo cometido es devolver la ruta de un directorio "especial" de Windows determinado, como puedan ser los directorios "Mis documentos", "Mi música", etcétera.
Para ello, principalmente, hago uso de la función del API de Windows "SHGetSpecialFolderPath" (más información sobre ella en el hilo citado arriba).
Es el caso que prácticamente he concluído dicha sencilla clase (o al menos me lo creo) pero encuentro un problema con el resultado de la referida función: este es... cómo lo diría... incorrecto, en cierto modo. No el esperado en cualquier caso.
Por ejemplo, si primero trato de hallar la ruta de un directorio y acto seguido compruebo la existencia del mismo el resultado es correcto, puesto que, efectivamante, el directorio cuya existencia se comprueba existe: así me lo indica la función "DirectoryExists" que utilizo para tal fin.
Sin embargo, si lo que pretendo es añadir a la ruta del directorio obtenido alguna cadena,... aun cuando realizo la concatenación de la ruta y la cadena y el compilador no se queja de nada lo que obtengo al cabo es la ruta del directorio, pero sin la cadena unida a la misma.
Supóngase que quiere crearse un directorio en donde está instalado Windows. Entonces pretendo hacer algo así:
Código Delphi
[-]
class function TDirectoriosWindows.RutaDirectorio(const
directorio: TDirWin; crear: boolean) : string;
begin
SetLength(Result, MAX_PATH);
SHGetSpecialFolderPath(GetCurrentProcess, PChar(Result),
NumeroDirectorio(directorio), crear);
end;
(...)
var
s: string;
begin
s := TDirectoriosWindows.RutaDirectorio(dew_DirectorioWindows, false);
s := s +'\'+ otroDirectorio;
ShowMessage(s);
end;
He omitido algunas cuestiones, pero, creo que puede entenderse si digo que el "ShowMessage" me devuelve "C:\Windows",... y ni rastro de "\otroDirectorio".
Llama la atención el "ShowMessage", puesto que muestre la ruta "C:\Windows", tal como se espera, pero, con lo que parece un buen número de espacios en blanco a la derecha de dicha ruta... de tal manera que el "ShowMessage" se sale de la pantalla, ni más ni menos.
Traté de pasar el resultado/la ruta por "TrimRight", pero, esto no funciona. Y, si en lugar de mostrar la ruta en un "ShowMessage" la añado a una línea de un "TMemo" en esta no sobran caracteres, no hay caracteres en blanco, puede verse, en este caso "C:\Windows", sin más...
¿Cómo es posible esto? Creo que tendrá que ver con cómo trabajo con la función "SHGetSpecialFolderPath", concretamente con la instrucción "SetLength(Result, MAX_PATH);" que puede verse más arriba.
Sin embargo, recurro a vuestra ayuda, a ver si podéis orientarme, como estoy seguro de que así será. Adjunto la unidad en la que implemento la sencilla clase "TDirectoriosWindows".
Si en algo no me he explicado, pues me lo hacéis saber y trato de hacerlo de buena gana. Muchas gracias de antemano por vuestra ayuda.