Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Puntoinfinito en 8 Febrero 2013, 17:46 pm



Título: [C++]Acceder a otros directorios durante la ejecución
Publicado por: Puntoinfinito en 8 Febrero 2013, 17:46 pm
Hola!

Estoy creando un proyecto en C++ bastante importante y la verdad que tengo un problema... Antes de todo aclarar que está siendo estrictamente desarrollado para solo sistemas Linux.

Lo que necesito es que creé un fichero .conf que la aplicación lo lea y pueda atribuir la configuración del fichero. El .conf se encuentra en /etc/ mientras que la aplicación en si se encuentra en /usr/bin. La lectura y escritura del fichero se realiza a través de ifstream y ofstream lo que produce que tenga que poner en el código ../../ para desplazarme carpetas atrás.

Pero claro, el problema está que esto se hace a través del directorio donde se encuentra el usuario en la consola es decir en su /home/user, pero no siempre es así, siempre que cambie de directorio el programa no va a poder leer el fichero .conf ya que no se encontrará a la ruta donde el objeto de ifstream fue declarado; ifstream fich("../../etc/fich.conf").

No sé si se entiende, pero les pondré un ejemplo;

Estoy en mi consola desde [~ usuario] es decir (/home/usuario). Yo ejecuto nombredelprograma en la consola y este lee /usr/bin y detecta que existe. El programa comienza a ejecutarse. Primero mira si ../../etc/fich.conf existe, en este caso sí, ya que estamos posicionados en la ruta perfecta.

Pero bien, ahora imaginemos que estamos en consola desde /home/usuario/Desktop, ahora al que el programa revise ../../etc/fich.conf verá que no existe y entonces producirá un error, ya que es como si estuviese mirando si existe en /home/etc/fich.conf y esto no existe en linux...

La verdad que estaría bien que el programa solo comenzar se situara por defecto en alguna ruta donde se fije así el programa lea perfectamente. He intentado de hacerlo con system("cd /home/usuario") al principio de la ejecución de código, debido a que solo será para sistemas Linux, pero nada, no va...

Sé que no se entiende muy bien, pero he intentado explicar-lo lo mejor posible, si hay dudas no duden en comentar y intentaré responder para aclarar mejor....  :D

Saludos


Título: Re: [C++]Acceder a otros directorios durante la ejecución
Publicado por: 0xDani en 8 Febrero 2013, 19:17 pm
A ver, quiza te interese getcwd() (http://pubs.opengroup.org/onlinepubs/009695399/functions/getcwd.html) y chdir() (http://pubs.opengroup.org/onlinepubs/009695399/functions/chdir.html)

No se si he entendido muy bien lo que querias, pero creo que con eso no te sera dificil conseguirlo, de todas formas cualquier duda con las funciones o lo que sea postea.

Aunque lo que no se es porque haces esto:

Código
  1. ifstream fich("../../etc/fich.conf")

Normalmente si la ruta empieza por un slash ('/'), esta se interpreta como una ruta absoluta, asi que con hacer:

Código
  1. ifstream fich("/etc/fich.conf")

Deberia funcionar.

Saludos.


Título: Re: [C++]Acceder a otros directorios durante la ejecución
Publicado por: Puntoinfinito en 8 Febrero 2013, 21:45 pm
A ver, quiza te interese getcwd() (http://pubs.opengroup.org/onlinepubs/009695399/functions/getcwd.html) y chdir() (http://pubs.opengroup.org/onlinepubs/009695399/functions/chdir.html)

No se si he entendido muy bien lo que querias, pero creo que con eso no te sera dificil conseguirlo, de todas formas cualquier duda con las funciones o lo que sea postea.

Aunque lo que no se es porque haces esto:

Código
  1. ifstream fich("../../etc/fich.conf")

Normalmente si la ruta empieza por un slash ('/'), esta se interpreta como una ruta absoluta, asi que con hacer:

Código
  1. ifstream fich("/etc/fich.conf")

Deberia funcionar.

Saludos.

Gracias!! Ahora me lo miro con calma, pero ya te digo; los dos puntos los pongo para indicar de que se trata de una carpeta anterior. No sé, esto lo he "pillado" de PHP, tal vez en C++ no es así y no lo se... Entonces si pongo /ruta/ ya lo toma como ruta absoluta y se va a ella sin tener que indicar la posición (sin los dos puntos vamos)?


Título: Re: [C++]Acceder a otros directorios durante la ejecución
Publicado por: Puntoinfinito en 8 Febrero 2013, 23:44 pm
Perfecto, solución encontrada  ;-)

Gracias por tu ayuda!


Título: Re: [C++]Acceder a otros directorios durante la ejecución
Publicado por: 0xDani en 9 Febrero 2013, 14:35 pm
Lo de los dos puntos no es propio del lenguaje, sino del SO. En Unix/Linux, un punto es el directorio actual y dos puntos el anterior.

Por cierto, se puede preguntar que estas programando? Porque en programacion especifica para Linux si te hace falta en cosas puntuales te puedo echar una mano o dar sugerencias  ;)


Título: Re: [C++]Acceder a otros directorios durante la ejecución
Publicado por: Puntoinfinito en 9 Febrero 2013, 20:23 pm
Lo de los dos puntos no es propio del lenguaje, sino del SO. En Unix/Linux, un punto es el directorio actual y dos puntos el anterior.

Por cierto, se puede preguntar que estas programando? Porque en programacion especifica para Linux si te hace falta en cosas puntuales te puedo echar una mano o dar sugerencias  ;)

Por supuesto, estoy programando una aplicación de consola que se utiliza a través de comandos con la que puedes generar accesos directos (los unicos Desktop Entry de Linux) si puede ser con algúnos plugins :)

Si quieres participar o ayudar un poco no dudes en decírmelo!


Título: Re: [C++]Acceder a otros directorios durante la ejecución
Publicado por: 0xDani en 9 Febrero 2013, 20:27 pm
Claro, por mi encantado, es una buena idea  ;)