PDA

Ver la Versión Completa : Cambiar de directorio


Cañones
24-08-2010, 01:04:23
Hola a todos.
Necesito cambiar de directorio en base a donde está mi exe.
Código Delphi [-] (http://www.clubdelphi.com/foros/#)//...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 Notevi
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 Notevi
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.

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:

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 Notevi
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:

miruta := extractfilepath(paramstr(0));


Ahora sólo debes añadir la parte que quieras:

larutadata := miruta + '\data\';


ahora cambiamos a esa ruta

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:


directorio:String;
begin
directorio := ExtractFilePath(Application.ExeName);
directorio := Copy(directorio, 1, LastDelimiter('\', directorio));
chdir(directorio+'data');
directorio := GetCurrentDir;
ShowMessage('Nueva ruta: '+directorio);


Saluditos

Casimiro Notevi
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 :))

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

Caro
24-08-2010, 18:04:36
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 ;).


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.