Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   algunas dudar sobre funcion para obtener directorio (https://www.clubdelphi.com/foros/showthread.php?t=45026)

javier20 20-06-2007 22:06:21

algunas dudar sobre funcion para obtener directorio
 
buenass, tengo algunas dudas hace tiempo que vengo conel delphi, a ver si alguien me las puede resolver se lo agradeceria muchisimo:

aca van:.............


Código Delphi [-]function WinDir: string;
var
Path: array[0..MAX_PATH - 1] of Char;
begin
GetWindowsDirectory(Path, Sizeof(Path));
Result := string(Path) + '\';
end;




bueno en primer lugar andube haciendo pruebas, con un ShowMessage(IntToStr(MAX_PATH)) y me da que el contenido de esa variable es de 260 caracteres, hasta ahi todo ok.

1-parece ser que tratandose de rutas del systema siempre es mas conveniente usar un array de chars en lugar de una string, me gustaria saber por q

2- veo que a esa variable MAX_PATH le resta -1, sabiendo que el array comienza en el caracter 0 y que llega hasta 260 yo estaria teniendo 261 aracteres, y restandole el -1 obtendria 260 de nuevo , por que no poner un numero mas simple como 200 y listo:D ?

3- GetWindowsDirectory(Path, Sizeof(Path)); aca parece ser que pone en el array(Path) el contenido de el directorio windows, y el segundo parametro rellena el contenido con un determinado numero de bits, para que?

4- Result := string(Path) + '\'; el Result es el equivalente a lo que va a devolver la funcion, cierto? osea una string, pero ahi veo que pasa el array a string y le suma el caracter quedando la ruta asi : C:\WINDOWS\ pero si no le paso la palabra string sigue funcionando = :confused:

bueno por ahora son esas dudas nomas y me quedan un monton:D bueno si alguien me puede ayudar se lo agradeceria muchisimo,desde ya muchas gracias.

roman 20-06-2007 22:41:14

1. Internamente, un string es un apuntador, y como la función es de la API de Windows y no de Delphi, éste no sabría que cantidad de memoria asignarle. Supongo que podrías usar un string pero especificando antes una longitud:

Código Delphi [-]
SetLength(Path, 260);

2. El porqué específico del 260 tendrás que preguntárselo a Bill Gates.

3. Ese parámetro indica a la API de Windows de qué tamaño es el buffer donde va a colocar el resultado. Si el tamaño es menor que lo que ocupa el path, windows te devolverá el número de bytes que debe tener tu buffer. Si somos muy exquisitos, deberíamos programar así:

Código Delphi [-]
var
  Path: PChar;
  Length: Integer;

begin
  Length := GetWindowsDirectory(Path, 0);
  GetMem(Path, Length);

  try
    GetWindowsDirectory(Path, Legth);
  finally
    FreeMem(Path);
  end;
end;

para así usar sólo la memoria indispensable.

4. El que programó ese ejemplo olvidó que un array[0..N] of Char es compatible con string.

// Saludos


La franja horaria es GMT +2. Ahora son las 19:30:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi