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

  1. Incluir las Bibliotecas Necesarias: #include <iostream>, #include <fstream>, #include <string>.
  2. Abrir el Archivo: std::ifstream inputFile("example.txt");.
  3. Leer el Archivo Línea por Línea: while (getline(inputFile, line)).
  4. 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

  1. Abrir el Archivo: std::ofstream outputFile("output.txt");.
  2. Escribir en el Archivo: outputFile << "Texto" << std::endl;.
  3. 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++.

© Copyright 2024. Todos los derechos reservados