Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cambiar de directorio (https://www.clubdelphi.com/foros/showthread.php?t=69522)

Cañones 24-08-2010 01:04:23

Cambiar de directorio
 
Hola a todos.
Necesito cambiar de directorio en base a donde está mi exe.
Código Delphi [-]//...MiPrograma\bin\archivo.exe //Esto lo obtengo con ExtractFilePath(Application.ExeName);

Como hago por medio de código cambiar al directorio
...MiPrograma\data\...

Estuve buscando en le foro pero no pude encontrar la solución.
Si ya existe un hilo con la solución por favor que me avice.
Gracias a todos.

Casimiro Noteví 24-08-2010 01:12:06

chdir

http://www.delphibasics.co.uk/RTL.asp?Name=ChDir

Cañones 24-08-2010 02:16:31

Gracias Casimiro por la pronta respueta.
Pero mi problema es que no se donde va a estar mi aplicación.
Por eso necesito en base a la ruta del .exe subir una carpeta y luego entrar en la carpeta\data.
Espero ser claro.
Gracias nuevamente.

Casimiro Noteví 24-08-2010 02:19:55

Pues entonces no entiendo :confused:

Cañones 24-08-2010 03:08:58

Bueno, vamos desde cero.
Tengo una aplicación X.
La estructura de las carpetas es la siguiente.
...\X -> Directorio principal
...\X\bin -> Directorio con el .exe los .ini y .dll
...\X\data -> Directorio con el .fbd y un archivo .txt para el log

Yo no se donde va a estar la carpeta X, ya que la idea es que sea portable y que se copie y pegue en cualquier lado y salga andando.
Puede estar en C:\X o en C:\Documents and Settings\cañones\Escritorio.
Entonces con la función extractpath puedo saber la ruta completa del .exe.
Como puedo cambiar de directorio laRuta\X\bin a laRuta\X\data.
Mi idea era usar alguna función de delphi, pero si no existe creo mi propio procedimiento.
Muchas gracias.
Saludos.

Caral 24-08-2010 03:40:45

Hola
El ejemplo que mostro Casimiro dara la direccion de X/Data.
Código Delphi [-]
var
  directory : string;
begin
  GetDir(2, directory);
  ShowMessage(directory+'\Data');
Asi se puede saber la direccion correcta y ampliar la misma a la carpeta Data.
El dato es string, se puede usar de cualquier forma
Saludos

Caral 24-08-2010 03:50:26

Hola
Es lo mismo que se puede hacer con ExtractFilePath
Como son datos string se pueden manejar a nuestro antojo:
Código Delphi [-]
var
  programa : string;
begin
  programa:= ExtractFilePath(Application.ExeName);
  ShowMessage(programa+'Data\');

Y asi sucesivamente.
Saludos

Cañones 24-08-2010 15:45:05

Caral, probé los dos ejemplos que me has dejado pero no hace lo que necesito.
El tema es que data está en el mismo nivel que bin, no dentro de bin\data.
Gracias de igual modo.
Me voy a poner a trabajar en un procedimiento que haga lo que necesito.
Cuando lo tenga lo coloco en el hilo.
Gracias a todos.

Casimiro Noteví 24-08-2010 16:40:42

Pues... no te explicas qué problema tienes... o no te entendemos :confused:

devuelve la ruta a tu programa, por ejemplo:
Código:

miruta := extractfilepath(paramstr(0));
Ahora sólo debes añadir la parte que quieras:
Código:

larutadata := miruta + '\data\';
ahora cambiamos a esa ruta
Código:

chdir( larutadata );

Caro 24-08-2010 17:15:37

Hola, lo que yo entiendo es que quiere acceder a un nivel anterior al directorio donde esta su ejecutable, si es eso puedes hacerlo de esta forma:

Código Delphi [-]
directorio:String;
begin
  directorio := ExtractFilePath(Application.ExeName);
  directorio := Copy(directorio, 1, LastDelimiter('\', directorio));
  chdir(directorio+'data');
  directorio := GetCurrentDir;
  ShowMessage('Nueva ruta: '+directorio);

Saluditos

Casimiro Noteví 24-08-2010 17:43:50

Si quiere ir a un directorio arriba sólo hay que añadirle los dos puntos

Ejemplo: (a lo bruto :))
Código:

miruta := extractfilepath(paramstr(0));
cddir( miruta );
cddir( '..\'  );
chdir( 'data' );


Caro 24-08-2010 18:04:36

Cita:

Empezado por Casimiro Notevi (Mensaje 374331)
Si quiere ir a un directorio arriba sólo hay que añadirle los dos puntos

Hola Casimiro :), sabía que se tenía que aumentar los dos puntos, la prueba que hice me daba error por eso puse el anterior codigo, acabo de probar nuevamente y si funciona como dices ;).

Código Delphi [-]
  directorio := ExtractFilePath(Application.ExeName);
  chdir(directorio+'..\data');
  directorio := GetCurrentDir;

Saluditos

Cañones 24-08-2010 18:26:27

Mil gracias Casimiro y Caro por el tiempo.
Eso es exactamente lo que necesitaba. Por lo visto era un problema al comunicarles mi duda, ya que lo solucionaron muy fácil y de una manera sencilla.
Muchas gracias nuevamente.

Saludos de Cañones.


La franja horaria es GMT +2. Ahora son las 05:36:16.

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