Ver Mensaje Individual
  #1  
Antiguo 01-06-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Sobre cierto resultado de la función SHGetSpecialFolderPath

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 [-]
 // Implementación de la función que uso para ello
 class function TDirectoriosWindows.RutaDirectorio(const
   directorio: TDirWin; crear: boolean) : string;
 begin
   SetLength(Result, MAX_PATH);
   SHGetSpecialFolderPath(GetCurrentProcess, PChar(Result),
     NumeroDirectorio(directorio), crear);
 end;
 
 // La cual puedo llamar de esta manera:
 (...)
 var
   s: string;
 begin
   s := TDirectoriosWindows.RutaDirectorio(dew_DirectorioWindows, false);
   // ... para a continuación...
   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.
Archivos Adjuntos
Tipo de Archivo: zip DirectoriosWindows.zip (1,8 KB, 53 visitas)
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita