Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Como saber en que ruta instalara el programa el usuario?

Iniciado por Antares, 01 de Julio de 2003, 09:04:42 PM

« anterior - próximo »

Antares

                                Tengo un programa que lee un archivo de configuracion que el usuario puede modificar. Pero lo he hecho de manera cutre para probarlo y funciona, pero si instalasen el programa en otra ruta no funcionara. De hecho si cambio la ruta de trabajo del programa durante su uso ya no funciona.

1 ¿Alguien me puede ayudar sobre donde ubicar este tipo de archivos? ¿En la carpeta raiz? ¿En la carpeta res?

2 ¿Como obtener la ruta donde se instala el programa para acceder despues a estos archivos?

3 ¿Que opciones son las mas habituales para los *.ini *.cfg etc.?

tambien me vale que palabras usariais para buscar info sobre esto en las MFC

Gracias de antemano

Antares                                

Mars Attacks

                                Lo que yo haría (y he visto hacer en algunos programas) es lo siguiente:
Si le das al usuario la opción de instalar en alguna carpeta distinta a la que pongas por defecto, se crea un ini de instalación con un tag parecido a [path] C:loquesea
en el mismo directorio donde esté el ejecutable del programa (será en el mismo directorio que hay tras la variable [path] que crees).
Después, desde el ejecutable, lo primero que haces es leer el archivo y cargar todo ese path en alguna parte, y usarlo para lo que quieras.

De todas formas tengo la sensación de que no es esto lo que preguntas. No he entendido muy bien lo de que "cambie la ruta de trabajo mientras se usa".

¿Podrías ser más específico? Normalmente cuando quieres acceder a un programa, ya sabes dónde está porque
a) lo has instalado en la carpeta que te viniera por defecto, por ejemplo, c:proyecto
B) lo has instalado en la carpeta que le hayas dicho tú, por ejemplo, c:archivosproyecto
c) has hecho un acceso directo en el escritorio que linka a la dirección de instalación que le hayas dicho tú.                                

deadLock++

                                Lo mas común es buscar en el directorio donde estás parado, es decir, no importa donde se instale el programa el directorio actual al momento de correrlo estará fijado en ese mismo y todas tus referencias a archivos de tu juego serán relativas a ese dir.

Por lo tanto en lugar de buscar "c:/loquesea/tuarchivo.cfg", buscarás "./tuarchivo.cfg".

Otro modo, también muy común es utilizar la registry. Esto es muy utilizado para cuando, por ejemplo, quieres instalar un parche del juego y deseas verificar si el juego en sí mismo ya está instalado, entonces para no buscar el juego por todo el disco directamente buscas en un entrada específica de la registry (ej: HKEY_LOCAL_MACHINESOFTWARETUEMPRESATUJUEGO y luego buscas un valor alfanumérico llamado, por ejemplo, "InstallPath").

Para manejar la registry puedes utilizar las funciones del API Win32 (RegCreateKey, RegQueryValueEx, etc).

Sin ir mas lejos, el Half-Life utiliza este método y coloca el path de instalación en HKEY_LOCAL_MACHINESOFTWAREVALVEHALF-LIFE  luego el valor está en InstallPath).                                

sés

                                ¿Todos se han olvidado de utilizar los argumentos de la línea de comandos? ¬¬

No hace falta llenar el registo o el disco con información inútil.

El primer argumento (en C, argv[0]) contiene la ruta COMPLETA del ejecutable ("c:miprogramaloquesea.exe").                                
Soy indeciso... ¿o no?

Mars Attacks

                                Sés, pero imagínate que quieres acceder a la carpeta "imagen" dentro de la carpeta donde has instalado el programa (y no usas una ruta relativa, que por cierto, ¿por qué no usas rutas relativas y te ahorras todo esto?). Si lo haces mediante el argv[0], tendrás que tratar esa información para quitarle la parte del nombre del programa y luego añadirle "imagen". Es menos complicado escribir el fichero con el path y luego leerlo y trabajar con él (creo yo, no sé...  :loco: )                                

sés

                               
CitarSi lo haces mediante el argv[0], tendrás que tratar esa información para quitarle la parte del nombre del programa y luego añadirle "imagen".

¡Diox! Menudo currazo :o

Hombre, se extrae la raíz (todo menos nombre y extensión) y se guarda en una variable. Luego sólo tienes que añadir lo que quieras a eso.

Ejemplo:

Al principo del todo te quedas con el path. Pongamos: "c:miprograma"

Luego hacemos una función algo como:

char path[1024]; // suponemos que ya tiene "c:miprograma"



char *f( char *fich )

{

static char s[1024];



   sprintf( s, "%s%s", path, fich );

   return s;

}


Esa función nos daría la ruta a cualquier fichero dentro de nuestro directorio: f( "imagenesalgo.pcx" ) retornará: "c:miprogramaimagenesalgo.pcx"


Además, lo del fichero está muy "bien", pero no puedes llevarte ese programa a otro sitio, ya dependería de ese INI o del registro ¬¬
Si te lo cambio de directorio no funcionaría. Y este método no mete información en ningún sitio, no creo "basura".                                
Soy indeciso... ¿o no?

deadLock++

                               
Citar¿Todos se han olvidado de utilizar los argumentos de la línea de comandos? ¬¬

No hace falta llenar el registo o el disco con información inútil.

El primer argumento (en C, argv[0]) contiene la ruta COMPLETA del ejecutable ("c:miprogramaloquesea.exe").

Ciertamente, y en Windows puedes obtener la misma información con la función GetCommandLine.

De todos modos prefiero acceder a los archivos con path relativo.

La solución de la registry, como mencioné, es conveniente cuando aún no has ejecutado el programa y otro proceso requiere saber donde se encuentra instalado el mismo (que es muy común en la instalación de un parche o una expansión).                                

Mars Attacks

                                Po fale  :oops:                                

Antares

                               
Cita de: ""sésEl primer argumento (en C") contiene la ruta COMPLETA del ejecutable ("c:miprogramaloquesea.exe").

Como accedo  a esa ruta? si escribo argv[0] me dice que es un identificador no declarado.

Antares                                

Antares

                                char path[1024]; // suponemos que ya tiene "c:miprograma"



char *f( char *fich )

{

static char s[1024];



   sprintf( s, "%s%s", path, fich );

   return s;

}


Esa función nos daría la ruta a cualquier fichero dentro de nuestro directorio: f( "imagenesalgo.pcx" ) retornará: "c:miprogramaimagenesalgo.pcx"

Me lo podrias poner un poco mas claro por favor.                                

sés

Cita de: "deadLock"Ciertamente, y en Windows puedes obtener la misma información con la función GetCommandLine.

De todos modos prefiero acceder a los archivos con path relativo.
¿Y si alguien lo ejecuta desde otro directorio? Los PATHs relativos serían desde el directorio actual, que no sería el del programa.
Soy indeciso... ¿o no?

sés

 
CitarEsa función nos daría la ruta a cualquier fichero dentro de nuestro directorio: f( "imagenesalgo.pcx" ) retornará: "c:miprogramaimagenesalgo.pcx"

Me lo podrias poner un poco mas claro por favor.
:P Lo siento, este foro se me ha comido las barras, te lo pongo con las otras barras:

Esa función nos daría la ruta a cualquier fichero dentro de nuestro directorio: f( "imagenes/algo.pcx" ) retornará: "c:/miprograma/imagenes/algo.pcx"
Soy indeciso... ¿o no?






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.