Trabajo con el sistema de archivos en C++: guía completa para principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con el sistema de archivos en C++: desde lo básico hasta técnicas avanzadas



Trabajar con el sistema de archivos es una de las tareas clave en cualquier aplicación seria en C++. Ya sea para leer archivos de configuración, escribir registros, procesar grandes volúmenes de datos o gestionar proyectos, saber cómo interactuar correctamente con archivos y directorios es necesario para todo desarrollador de C++. En este artículo, analizaremos los enfoques principales para trabajar con el sistema de archivos en C++, desde las funciones clásicas de C hasta el moderno std::filesystem, que apareció en C++17.



Veremos ejemplos prácticos que te ayudarán no solo a entender la teoría, sino también a aplicar inmediatamente los conocimientos adquiridos en proyectos reales. Todos los ejemplos de código están probados y listos para usar.



1. Fundamentos del trabajo con archivos: flujos de entrada/salida



La forma más común de trabajar con archivos en C++ es usando la biblioteca <fstream>. Esta proporciona tres clases principales:



  • std::ifstream — para leer desde un archivo (input file stream);
  • std::ofstream — para escribir en un archivo (output file stream);
  • std::fstream — para leer y escribir (file stream).


Lectura desde un archivo



Para leer datos de un archivo, crea un objeto std::ifstream y abre el archivo. La forma más sencilla de leer un archivo línea por línea es usando la función std::getline:



#include <iostream>#include <fstream>#include <string>

int main() { std::ifstream inputFile("example.txt"); if (!inputFile.is_open()) { std::cerr << "¡Error al abrir el archivo!" << std::endl; return 1; }

std::string line; while (std::getline(inputFile, line)) { std::cout << line << std::endl; }

inputFile.close(); return 0;}


Observa la comprobación is_open() — esta es una práctica importante que evita que el programa se bloquee si el archivo no existe.



Escritura en un archivo



Para escribir datos se usa std::ofstream. Por defecto, el archivo se crea de nuevo (modo trunc). Si necesitas añadir datos al final, usa la bandera std::ios::app:



#include <iostream>#include <fstream>

int main() { std::ofstream outputFile("output.txt", std::ios::app); if (!outputFile.is_open()) { std::cerr << "¡Error al crear el archivo!" << std::endl; return 1; }

outputFile << "Línea 1" << std::endl; outputFile << "Línea 2" << std::endl; outputFile << "Número: " << 42 << std::endl;

outputFile.close(); return 0;}


Trabajo con archivos binarios



Para datos binarios, usa los métodos read() y write() especificando el tamaño del bloque:



#include <iostream>#include <fstream>#include <cstring>

struct Record { int id; char name[50]; double value;};

int main() { // Escritura Record r = {1, "Registro de prueba", 3.14}; std::ofstream binOut("data.bin", std::ios::binary); binOut.write(reinterpret_cast<const char*>(&r), sizeof(r)); binOut.close();

// Lectura Record r2; std::ifstream binIn("data.bin", std::ios::binary); binIn.read(reinterpret_cast<char*>(&r2), sizeof(r2)); binIn.close();

std::cout << "ID: " << r2.id << ", Name: " << r2.name << ", Value: " << r2.value << std::endl; return 0;}


2. Enfoque moderno: la biblioteca std::filesystem (C++17)



A partir de C++17, se añadió a la biblioteca estándar <filesystem>, que simplifica significativamente el trabajo con el sistema de archivos.

Blogs

Book Recommendations