En este módulo, aprenderemos cómo manejar archivos en C++. La capacidad de leer y escribir archivos es fundamental para muchas aplicaciones, desde el almacenamiento de datos hasta la configuración de programas. Este tema cubre los conceptos básicos de la entrada/salida de archivos en C++ utilizando las bibliotecas estándar.
Contenidos
Introducción a la Entrada/Salida de Archivos
En C++, la biblioteca estándar proporciona varias clases para manejar archivos, principalmente a través de las clases ifstream
(entrada de archivo), ofstream
(salida de archivo) y fstream
(entrada/salida de archivo).
Clases de Archivo
ifstream
: Utilizada para leer datos de un archivo.ofstream
: Utilizada para escribir datos en un archivo.fstream
: Utilizada para leer y escribir datos en un archivo.
Lectura de Archivos
Para leer un archivo en C++, utilizamos la clase ifstream
. A continuación, se muestra un ejemplo básico de cómo leer un archivo línea por línea.
#include <iostream> #include <fstream> #include <string> int main() { std::ifstream inputFile("example.txt"); std::string line; if (inputFile.is_open()) { while (getline(inputFile, line)) { std::cout << line << std::endl; } inputFile.close(); } else { std::cerr << "No se pudo abrir el archivo." << std::endl; } return 0; }
Explicación del Código
- Incluir las Bibliotecas Necesarias:
#include <iostream>
,#include <fstream>
,#include <string>
. - Abrir el Archivo:
std::ifstream inputFile("example.txt");
. - Leer el Archivo Línea por Línea:
while (getline(inputFile, line))
. - Cerrar el Archivo:
inputFile.close();
.
Escritura de Archivos
Para escribir en un archivo, utilizamos la clase ofstream
. Aquí hay un ejemplo básico de cómo escribir en un archivo.
#include <iostream> #include <fstream> int main() { std::ofstream outputFile("output.txt"); if (outputFile.is_open()) { outputFile << "Esta es una línea de texto." << std::endl; outputFile << "Esta es otra línea de texto." << std::endl; outputFile.close(); } else { std::cerr << "No se pudo abrir el archivo." << std::endl; } return 0; }
Explicación del Código
- Abrir el Archivo:
std::ofstream outputFile("output.txt");
. - Escribir en el Archivo:
outputFile << "Texto" << std::endl;
. - Cerrar el Archivo:
outputFile.close();
.
Apertura y Cierre de Archivos
Es importante abrir y cerrar archivos correctamente para evitar pérdidas de datos y liberar recursos del sistema.
Apertura de Archivos
- Modo de Lectura:
std::ifstream inputFile("example.txt");
- Modo de Escritura:
std::ofstream outputFile("output.txt");
- Modo de Lectura/Escritura:
std::fstream file("example.txt", std::ios::in | std::ios::out);
Cierre de Archivos
- Utilizar el método
close()
:inputFile.close();
,outputFile.close();
.
Modos de Apertura de Archivos
Los archivos pueden abrirse en diferentes modos, que se especifican utilizando las banderas de la biblioteca <fstream>
.
Modo | Descripción |
---|---|
std::ios::in |
Abre el archivo para lectura. |
std::ios::out |
Abre el archivo para escritura. |
std::ios::app |
Añade los datos al final del archivo. |
std::ios::ate |
Mueve el puntero al final del archivo al abrirlo. |
std::ios::trunc |
Trunca el archivo si existe. |
std::ios::binary |
Abre el archivo en modo binario. |
Ejemplo de Uso de Modos
#include <iostream> #include <fstream> int main() { std::ofstream outputFile("output.txt", std::ios::app); if (outputFile.is_open()) { outputFile << "Añadiendo una nueva línea al final del archivo." << std::endl; outputFile.close(); } else { std::cerr << "No se pudo abrir el archivo." << std::endl; } return 0; }
Ejercicios Prácticos
Ejercicio 1: Lectura de Archivo
Escribe un programa que lea un archivo llamado data.txt
y muestre su contenido en la consola.
Ejercicio 2: Escritura de Archivo
Escribe un programa que solicite al usuario ingresar varias líneas de texto y las guarde en un archivo llamado user_input.txt
.
Ejercicio 3: Copia de Archivo
Escribe un programa que copie el contenido de un archivo llamado source.txt
a otro archivo llamado destination.txt
.
Soluciones
Solución Ejercicio 1
#include <iostream> #include <fstream> #include <string> int main() { std::ifstream inputFile("data.txt"); std::string line; if (inputFile.is_open()) { while (getline(inputFile, line)) { std::cout << line << std::endl; } inputFile.close(); } else { std::cerr << "No se pudo abrir el archivo." << std::endl; } return 0; }
Solución Ejercicio 2
#include <iostream> #include <fstream> #include <string> int main() { std::ofstream outputFile("user_input.txt"); std::string line; if (outputFile.is_open()) { std::cout << "Ingrese líneas de texto (escriba 'exit' para terminar):" << std::endl; while (true) { std::getline(std::cin, line); if (line == "exit") break; outputFile << line << std::endl; } outputFile.close(); } else { std::cerr << "No se pudo abrir el archivo." << std::endl; } return 0; }
Solución Ejercicio 3
#include <iostream> #include <fstream> #include <string> int main() { std::ifstream sourceFile("source.txt"); std::ofstream destinationFile("destination.txt"); std::string line; if (sourceFile.is_open() && destinationFile.is_open()) { while (getline(sourceFile, line)) { destinationFile << line << std::endl; } sourceFile.close(); destinationFile.close(); } else { std::cerr << "No se pudo abrir uno de los archivos." << std::endl; } return 0; }
Resumen
En este módulo, hemos aprendido cómo manejar archivos en C++ utilizando las clases ifstream
, ofstream
y fstream
. Hemos cubierto cómo abrir, leer, escribir y cerrar archivos, así como los diferentes modos de apertura de archivos. Los ejercicios prácticos proporcionados te ayudarán a reforzar estos conceptos y a desarrollar tus habilidades en la manipulación de archivos en C++.
Curso de Programación en C++
Módulo 1: Introducción a C++
- Introducción a C++
- Configuración del Entorno de Desarrollo
- Sintaxis y Estructura Básica
- Variables y Tipos de Datos
- Entrada y Salida
Módulo 2: Estructuras de Control
Módulo 3: Funciones
- Introducción a las Funciones
- Parámetros de Función y Tipos de Retorno
- Sobrecarga de Funciones
- Recursión
Módulo 4: Arreglos y Cadenas
- Introducción a los Arreglos
- Arreglos Multidimensionales
- Introducción a las Cadenas
- Manipulación de Cadenas
Módulo 5: Punteros y Referencias
- Introducción a los Punteros
- Aritmética de Punteros
- Punteros y Arreglos
- Referencias
- Asignación Dinámica de Memoria
Módulo 6: Programación Orientada a Objetos
- Introducción a la POO
- Clases y Objetos
- Constructores y Destructores
- Herencia
- Polimorfismo
- Encapsulación y Abstracción
Módulo 7: Temas Avanzados
- Plantillas
- Manejo de Excepciones
- Entrada/Salida de Archivos
- Biblioteca Estándar de Plantillas (STL)
- Expresiones Lambda
- Multihilo