Escribir a un archivo en C++
-
Usar el operador
fstream
y<<
para escribir en un archivo -
Usar la función
fstream
ywrite
para escribir en el archivo -
Use la función
fwrite
para escribir en un archivo
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!
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