Trabajo con el sistema de archivos en C++: para principiantes
Trabajar con el sistema de archivos es una de las tareas clave de cualquier programador. En C++ existen varias formas de interactuar con archivos y directorios: desde los flujos clásicos fstream hasta el moderno std::filesystem (C++17). En este artículo analizaremos las operaciones básicas: lectura y escritura de archivos, verificación de su existencia, creación y eliminación de carpetas, así como la navegación por el sistema de archivos. Todos los ejemplos de código están escritos en C++ y son adecuados para principiantes.
1. Fundamentos del trabajo con archivos mediante fstream
Las clases ifstream (entrada desde archivo), ofstream (salida a archivo) y fstream (entrada/salida) son las herramientas básicas para trabajar con archivos de texto y binarios. Se encuentran en el archivo de cabecera <fstream>.
Lectura de un archivo
Para leer datos de un archivo, cree un objeto ifstream y abra el archivo. Asegúrese de que el archivo exista; de lo contrario, el flujo estará en estado de error.
#include <iostream>#include <fstream>#include <string>
int main() { std::ifstream file("example.txt"); if (!file.is_open()) { std::cerr << "Error al abrir el archivo"; return 1; }
std::string line; while (std::getline(file, line)) { std::cout << line << std::endl; }
file.close(); return 0;}Escritura en un archivo
Para escribir, use ofstream. Si el archivo no existe, se creará. Si existe, el contenido se sobrescribirá (a menos que se especifique la bandera std::ios::app).
#include <fstream>
int main() { std::ofstream file("output.txt"); if (!file.is_open()) { std::cerr << "No se pudo crear el archivo"; return 1; }
file << "Hello, world!"; file << "Sistema de archivos C++";
file.close(); return 0;}Añadir datos al final del archivo
Use la bandera std::ios::app (append) para agregar datos al final sin eliminar los anteriores.
std::ofstream file("log.txt", std::ios::app);file << "Nueva entrada";file.close();2. Trabajo con directorios y sistema de archivos (C++17)
A partir de C++17, la biblioteca estándar incluye la cabecera <filesystem>, que proporciona una interfaz conveniente y multiplataforma para trabajar con el sistema de archivos. Para usarlo, agregue la bandera de compilación -std=c++17 (o superior) e incluya <filesystem>.
Verificación de existencia de un archivo o directorio
#include <iostream>#include <filesystem>namespace fs = std::filesystem;
int main() { fs::path p = "example.txt"; if (fs::exists(p)) { std::cout << "El archivo existe"; std::cout << "Tamaño: " << fs::file_size(p) << " bytes"; } else { std::cout << "Archivo no encontrado"; } return 0;}Creación y eliminación de directorios
#include <filesystem>namespace fs = std::filesystem;
int main() { // Creación de un directorio if (fs::create_directory("my_folder")) { std::cout << "Carpeta creada"; }
// Creación de directorios anidados fs::create_directories("a/b/c");
// Eliminación de un directorio vacío fs::remove("my_folder");
// Eliminación de un directorio con todo su contenido (¡cuidado!) // fs::remove_all("a");
return 0;}Recorrido del contenido de un directorio
#include <iostream>#include <filesystem>namespace fs = std::filesystem;
int main() { std::string path = "."; for (const auto& entry : fs::directory_iterator(path)) { if