Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: nadales56 en 5 Marzo 2019, 12:35 PM

Título: Ayuda con ficheros y directorios en C++ usando Codeblocks
Publicado por: nadales56 en 5 Marzo 2019, 12:35 PM
Buenas tardes! Gracias de antemano por leer este post.

Les comento, estoy implementando un código relativamente sencillo que se trata de copiar el contenido de un fichero de texto en otro, en base al nombre del fichero de texto origen que se encuentra en el mismo directorio donde se encuentra el script que estoy programando.

Si quisiera recurrir a un fichero que se encuentra en un directorio diferente,
¿qué funciones puedo usar o... dónde me recomiendan buscar información?

Les hago copia y pega del main.
///////////////////////////////////////
int main(){

Codigo ok;
string entrada, salida;

entrada = "Fichero_Entrada.txt"; //Fichero de donde cojo los datos
salida = "Fichero_Salida.txt"; // Creo nuevo fichero con este nombre con los datos copiados de Fichero_Entrada

traspasar_fichero(salida, entrada, ok);
codigo_error(ok);

entrada = "Fichero_Salida.txt";
salida = "Datos_actualizados.txt";

actualizar_datos(salida, entrada, ok);
codigo_error(ok);

}
////////////////////////////////////////////

Muchas gracias!


Título: Re: Ayuda con ficheros y directorios en C++ usando Codeblocks
Publicado por: K-YreX en 5 Marzo 2019, 15:20 PM
Los códigos puedes (y debes :xD) meterlos entre etiquetas de código GeSHi, en lugar de delimitarlo con barras diagonales. Es más fácil de ver y no se producen problemas de etiquetas. Lo puedes seleccionar encima del cuadro de texto al escribir/modificar un mensaje.

Dicho esto, si lo que quieres es cambiar la ruta del fichero, simplemente añade la ruta al nombre del fichero.
Título: Re: Ayuda con ficheros y directorios en C++ usando Codeblocks
Publicado por: nadales56 en 6 Marzo 2019, 09:05 AM
Muchas gracias YRex... para Windows no era así exactamente, pero con la pista que me has dado he acabado encontrándolo y funciona perfectamente.

Código (cpp) [Seleccionar]
string entrada = "C:\\""Carpeta_1""\\Carpeta_2""\\Carpeta_N""\\fichero_entrada.txt";


C++ toma \ como carácter de escape, por lo que hay que escribirlo doble \\ para separar las carpetas y cada una de ellas debe de tener sus respectivas comillas, tal y como he puesto en el ejemplo.
Título: Re: Ayuda con ficheros y directorios en C++ usando Codeblocks
Publicado por: K-YreX en 6 Marzo 2019, 16:46 PM
De todas formas me extraña que haya que usar doble barra ya que en ocasiones he visto rutas especificadas en un solo <string> :-X
Código (cpp) [Seleccionar]

string file_name = "d:\prueba.txt";
Título: Re: Ayuda con ficheros y directorios en C++ usando Codeblocks
Publicado por: nadales56 en 8 Marzo 2019, 11:58 AM
Buenas!
Siento ser tan pesado con el tema, pero quiero aprender bien al respecto.

Me he pasado a Ubuntu a través de una maquina virtual. De manera que el script lo escribo desde editor de texto y compilo desde el terminal.

El programa lo que hace es acceder a un fichero que se encuentra en la Carpeta_A y copiar su contenido en un nuevo fichero que se encontrará en la Carpeta_B, siendo la Carpeta_B el lugar donde tengo guardado el archivo cpp que estoy programando.

En el script tengo escrito esto:
Código (cpp) [Seleccionar]
string entrada = "Escritorio/Carpeta_A/Fichero_Origen.txt";
string salida = "Escritorio/Carpeta_B/Fichero_Destino.txt";


Y en el terminal he accedido a Escritorio/Carpeta_B, que es dónde se encuentra el archivo cpp, y para compilar hago:
g++ -o Nombre Archivo.cpp

Me compila y no da error alguno

y para ejecutar:

./Nombre

Pero no da resultado.


Decir también, que he probado copiando el Fichero_Origen en la Carpeta_B, que es donde se está trabajando, y en vez de poner rutas he puesto los nombres de los ficheros entre comillas con su respectiva terminación, y el programa hace lo que comento ahí arriba.
Lo hice para descartar que el error estuviese en el código.

Mis preguntas son:
1) ¿Están bién escritas las rutas en el script?
2) ¿Tengo que especificar en el terminal la ruta donde está el Fichero_Origen?
3) ¿He de usar alguna librería específica para trabajar con directorios?


Gracias de antenmano, un saludo.
Título: Re: Ayuda con ficheros y directorios en C++ usando Codeblocks
Publicado por: K-YreX en 8 Marzo 2019, 14:21 PM
[code]ruta_absoluta = "/home/<tu_usuario>/Escritorio/fichero_prueba.txt"
Puedes ver la ruta absoluta en la que te encuentras en la terminal con el comando <pwd>.

No sé por qué mi mensaje empieza con una etiqueta de <code> que no puedo quitar... Este párrafo debería ir lo primero, pero para que no se confunda con un <code> lo dejo aquí... :rolleyes:
Primero el tema de las rutas. El sistema de archivos de Linux "cuelga" de la raíz (root) /. Podemos referirnos a un fichero usando una ruta absoluta o una ruta relativa:
Título: Re: Ayuda con ficheros y directorios en C++ usando Codeblocks
Publicado por: nadales56 en 8 Marzo 2019, 18:07 PM
YreX-DwX, muchísimas gracias por el curro que te has dado tio!

Mucha información que procesar, una vez procesada la aplicaré y te diré que tal me va!
Gracias por la lección! ;)
Título: Re: Ayuda con ficheros y directorios en C++ usando Codeblocks [Solución al final]
Publicado por: nadales56 en 11 Marzo 2019, 10:30 AM
Escribo aquí el código que he usado para hacer referencia a las rutas donde tengo guardados los ficheros.

En primer lugar, nos ponemos en situación:
En Escritorio -> Carpeta_Origen -> Fichero_Origen.txt

Copiaremos el contenido de Fichero_Origen.txt en un nuevo fichero que denotaremos como Fichero_Destino.txt, que se guardará en:
Escritorio -> Carpeta_Destino

Decir también que nuestro script se encuentra en Escritorio -> Carpeta_Destino.

Lo que quiere decir, que en el terminal especifico que me encuentro en dicha ruta, escribiendo cd Escritorio + ENTER + cd Carpeta_Destino + ENTER

En este caso he usado la ruta relativa, por simplificar.


Código (cpp) [Seleccionar]

ruta_entrada = "../Carpeta_Origen/Fichero_Origen.txt";


Coloco .. para volver a Escritorio, ya que ejecutamos desde una carpeta que está en él (Carpeta_Destino) y luego concreto que quiero ir a Carpeta_Origen


Código (cpp) [Seleccionar]

ruta_salida = "Fichero_Destino.txt";


En este caso, ya me encuentro en la ruta que deseo (la misma donde he ejecutado el script), por lo que lo único que tengo que hacer es ponerle nombre al fichero que quiero crear con el contenido copiado, añadiendo su respectiva terminación


Esto no hubiese posible sin la ayuda y las explicaciones de YreX-DwX.
Un saludo!