Escribir a un archivo en C++

Jinku Hu 12 octubre 2023
  1. Usar el operador fstream y << para escribir en un archivo
  2. Usar la función fstream y write para escribir en el archivo
  3. Use la función fwrite para escribir en un archivo
Escribir a un archivo en C++

Este artículo explicará varios métodos de cómo escribir en un archivo en C++.

Usar el operador fstream y << para escribir en un archivo

El archivo I/O en C++ se maneja usando la clase fstream, que proporciona múltiples métodos incorporados para la manipulación y posicionamiento del flujo. Una vez que el objeto fstream es declarado, podemos llamar a la función open, pasando como argumentos el nombre del archivo y el modo en que se abre el archivo.

Cuando escribimos en un archivo, especificamos el modo std::ios_base::out, que corresponde al estado de apertura para escritura. A continuación, comprobamos si el archivo se ha asociado con éxito al objeto de la secuencia, es decir, la llamada al método is_open en la condición if. En este punto, el archivo está listo para tomar la entrada usando el operador << y procesar la salida según sea necesario.

Note que, el bloque else puede ser utilizado para propósitos de registro de errores, o podemos implementar rutinas de manejo de errores para una mejor ejecución del programa tolerante a fallas.

#include <fstream>
#include <iostream>

using std::cout;
using std::endl;
using std::fstream;
using std::ofstream;
using std::string;

int main() {
  string filename("tmp.txt");
  fstream file_out;

  file_out.open(filename, std::ios_base::out);
  if (!file_out.is_open()) {
    cout << "failed to open " << filename << '\n';
  } else {
    file_out << "Some random text to write." << endl;
    cout << "Done Writing!" << endl;
  }

  return EXIT_SUCCESS;
}

Resultado:

Done Writing!

Usar la función fstream y write para escribir en el archivo

Otro método para escribir en un archivo es la función incorporada de write que puede ser llamada desde el objeto fstream. La función write toma un puntero de cadena de caracteres y el tamaño de los datos almacenados en esa dirección. Como resultado, los datos dados se insertan en el archivo asociado con el objeto stream que llama.

En el siguiente ejemplo de código, demostramos el mínimo reporte de errores imprimiendo el estado de la llamada a la función open, pero en aplicaciones del mundo real, requeriría un manejo de excepciones más robusto, lo cual está documentado en la página de manual.

#include <fstream>
#include <iostream>

using std::cout;
using std::endl;
using std::fstream;
using std::ofstream;
using std::string;

int main() {
  string text("Some huge text to write to\n");
  string filename2("tmp2.txt");
  fstream outfile;

  outfile.open(filename2, std::ios_base::out);
  if (!outfile.is_open()) {
    cout << "failed to open " << filename2 << '\n';
  } else {
    outfile.write(text.data(), text.size());
    cout << "Done Writing!" << endl;
  }

  return EXIT_SUCCESS;
}

Resultado:

Done Writing!

Use la función fwrite para escribir en un archivo

Alternativamente, podemos usar la función fwrite del archivo de estilo C I/O para escribir en el archivo. fwrite obtiene los datos del puntero void y el programador es responsable de pasar el número de artículos almacenados en esa dirección así como el tamaño de cada artículo. La función necesita que el flujo de archivos sea del tipo FILE* y eso se puede obtener llamando a la función fopen.

Observe que fwrite devuelve el número de elementos escritos en un archivo cuando la operación se realiza con éxito.

#include <fstream>
#include <iostream>

using std::cout;
using std::endl;
using std::ofstream;
using std::string;

int main() {
  string text("Some huge text to write to\n");
  string filename3("tmp3.txt");

  FILE *o_file = fopen(filename3.c_str(), "w+");
  if (o_file) {
    fwrite(text.c_str(), 1, text.size(), o_file);
    cout << "Done Writing!" << endl;
  }

  return EXIT_SUCCESS;
}

Resultado:

Done Writing!
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C++ File