Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Que es más óptimo a la hora de obtener el directorio de trabajo (https://www.clubdelphi.com/foros/showthread.php?t=63151)

MAXIUM 31-01-2009 01:10:29

Que es más óptimo a la hora de obtener el directorio de trabajo
 
En el caso de requerir archivos desde el directorio de trabajo, que método es más óptimo

- ExtractFilePath(ParamStr(0)) + 'archivo.txt';
- ExtractFilePath(Application.ExeName) + 'archivo.txt';
- GetCurrentDir + '\archivo.txt';

dec 31-01-2009 01:15:47

Hola,

Creo que la tercera opción es la adecuada, puesto que las demás pueden no proporcionarte el directorio de trabajo. La tercera opción sí, en todo caso. Las otras, tal vez, si se da la casualidad... no sé si me explico. Y siempre que no me equivoque. ;)

MAXIUM 31-01-2009 01:43:18

Esteee no, no entendí la parte de "si se da la casualidad...".

dec 31-01-2009 02:08:00

Hola,

Bueno. "GetCurrentDir()" es la función para obtener el directorio de trabajo. Ahora bien, si tu aplicación (ninguna parte de tu aplicación) establece otro, si no me equivoco, en efecto, el directorio de trabajo será el directorio de tu aplicación. Pero, eso puede cambiarse: existe la función "SetCurrentDir()". De este modo, sólo puedes estar seguro de obtener el directorio de trabajo usando "GetCurrentDir()". Si se da la casualidad de que el directorio de trabajo sigue siendo el de tu aplicación, entonces las otras "posibilidades" que muestras funcionarán, pero, sólo por casualidad. Dicho de otro modo, la única posibilidad que te garantiza obtener el directorio de trabajo es "GetCurrentDir()", y dicho aún de otra forma: el resto de posibilidades que muestras sólo te ofrecerán el directorio de trabajo "por casualidad"... así que lógicamente no deberías usarlas.

MAXIUM 31-01-2009 02:52:26

OK, muchas gracias Dec.

cHackAll 31-01-2009 02:55:04

No concuerdo con esa relación que propones Dec, el problema creo que es el concepto de "directorio de trabajo". En todo caso lo claro para mi es que el directorio de trabajo es cualquiera que este dentro de la carpeta que contiene el ejecutable, por que? porque algún componente de terceros u otra situación puede (como tu dijiste) realizar por alguna necesidad un SetCurrentDir y cambiar el "directorio actual" a alguna carpeta totalmente impredecible. Entonces hacer un "GetCurrentDir + '\archivo.txt'" retornaría algo impredecible.

En tal caso la opción #3 no seria la más adecuada. Las otras dos opciones me parecen mas concretas, puesto que solo necesitamos recorrer la cadena retornada por GetModuleFileName para obtener la carpeta.

Saludos

dec 31-01-2009 03:00:43

Hola,

A ver. Tenemos que distinguir entre el directorio de trabajo y el directorio de la aplicación. Se me olvidó antes comentar, además, que el directorio de trabajo puede ser cambiado no ya por algún componente de tu aplicación, pero, por cualquier otra aplicación. Entonces, la forma de obtener el directorio de trabajo es "GetCurrentDir()". Si hablamos de obtener el directorio de la aplicación... esta función no es la indicada. ¿No estamos de acuerdo en esto? :rolleyes:

dec 31-01-2009 03:08:13

Hola,

Por cierto, ahora que lo menciona el compañero, es posible que se haya dado una confusión entre el directorio de trabajo y el directorio de la aplicación, del ejecutable de la aplicación. Son dos cosas distintas, y, bien parece que lo que se quiere aquí es el segundo, y no el primero, por cómo se utiliza la función "GetCurrentDir()", lo digo. Si esto es así, entonces, como he dicho, no es "GetCurrentDir()" la función que necesitamos, sino que cualquiera de las dos primeras posibilidades nos servirían. A ver si se aclara este punto. ;)

xEsk 31-01-2009 14:57:19

Cita:

Empezado por MAXIUM (Mensaje 336678)
En el caso de requerir archivos desde el directorio de trabajo, que método es más óptimo

- ExtractFilePath(ParamStr(0)) + 'archivo.txt';
- ExtractFilePath(Application.ExeName) + 'archivo.txt';
- GetCurrentDir + '\archivo.txt';

Solo como apunte, la opción 1 y 2, son la misma, ya que la propiedad "ExeName" devuelve el "ParamStr(0)".

Código Delphi [-]
function TApplication.GetExeName: string;
begin
  Result := ParamStr(0);
end;

Saludos.


La franja horaria es GMT +2. Ahora son las 19:42:15.

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