Guardando datos en un archivo de texto en C++

Usamos fopen y fprintf para guardar datos en archivos en C++.

Una de las dinámicas más divertidas en la programación básica es el crear archivos de texto para guardar en ellos datos y modificarlos también, aunque para nosotros el guardar datos o modificar el texto ya existente en un archivo puede ser lo mismo en verdad son dos dinámicas distintas en programación.

La mayoría de programas que se crean tienen como fin guardar datos en archivos tras manipularlos, en el siguiente ejemplo podrá ver como empezamos abriendo el archivo y podríamos decir que se instancia en una variable que llamaremos "archivo", cuando digo instanciar me refiero a que en archivo no se guardara su contenido todavía, en artículos anteriores expliqué que para leerlo se utilizan otras funciones pero lo que queremos hacer aquí es guardar contenido en el por lo tanto usaremos la función fprintf() pasemos al ejemplo y luego explico mas.

#include <cstdlib>
#include <cstdio>
using namespace std;
int main()
{
FILE *archivo; // FILE se escribe en mayuscula
char texto[]="Aqui tengo un poco de texto que debemos de guardar";
archivo = fopen( "documento.txt", "w"); // En el segundo parametro se escribe la forma en que sera abierto "w"
fprintf(archivo,texto);
system("pause");
return 0;
}


Archivo de texto que contiene texto guardado con la funcion fprintf.

En el artículo donde se habló como abrir un archivo se explicó los modos de apertura de archivos por ejemplo "w", el archivo puede ser abierto para solo lectura, lectura y escritura, o incluso para forzar su creación en caso que no exista, al usar "w", si no existe el archivo entonces se creara, tenga cuidado con los modos de apertura.

Permitir que el usuario escoja el nombre del archivo y escriba el texto



Pensé en extender la dinámica básica, la mejor forma es permitir que el usuario ingrese el nombre del archivo que quiere editar, en el siguiente ejemplo esto lo hacemos con ayuda de la función cin, almacenando el texto en una variable de tipo char para luego utilizarla en el fopen, así mismo permitimos que ingrese el texto que quiere guardar almacenándolo en otra variable.

#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
int main()
{
FILE *archivo;
char texto[10000];
char nombre[100];
cout << "Nombre del archivo a editar: ";
cin.getline(nombre, sizeof(nombre)); // Se utiliza la propiedad getline de cin, porque "cin << variable;" solo captura la primer palabra.
cout << "Escriba su texto: ";
cin.getline(texto, sizeof(texto));
archivo = fopen(nombre,"w");
fprintf(archivo,texto);
system("pause");
return 0;
}


Nota: al indicar el nombre del archivo se tiene que indicar la extensión, porque en verdad estas funciones permiten editar y guardar texto en cualquier tipo de archivo no solo en los .txt.
Comentarios y preguntas
Jose:
Gracias
Yeni:
Hola me pueden ayudar tengo un problema con los archivos en mi código
JAVIER:
Me dice que Fprinft no está declarado en este ámbito
Codigazo:
Hola Yeni, claro, estoy para ayudarle, comparta que es lo que está intentando hacer, cual es el problema que le surge y de ser posible el código para poder encontrar en que parte se presenta el problema.
Codigazo:
Bienvenido Javier, no es Fprinft es "fprintf", por eso le dice que no se ha declarado porque efectivamente no ha sido declarada una función llamada "Fprinft ", es decir no existe.
emilio:
hola, soy nuevo programando y quisiera saber como puedo guardar el resultado de un if en un txt.
por ejemplo: si mi if es

if(a>b){
cout<<" a es el mayor";
}else{
cout<<"b es mayor";


quiero que lo que salga de ahi se pueda guardar en un txt
Codigazo:
Hola emilio y bienvenido a C++, lo que tiene que hacer es que en lugar de utilizar cout asignar el valor a una variable dentro de la estructura condicional if, y posteriormente se guarda, para guardar texto en un char utilizamos la funcion strcpy();, el algoritmo queda de la siguiente forma.

#include <cstdlib>
#include <cstdio>
#include <cstring> // Añadimos esta librería donde se encuentra strcpy

using namespace std;

int a=1;
int b=2;
char texto[30];
int main()
{

if (a>b){
strcpy(texto,"a es mayor");
}
else{
strcpy(texto,"b es mayor");
}

FILE *archivo;
archivo = fopen( "documento.txt", "w");
fprintf(archivo,texto);
system("pause");
return 0;
}
Jesus Ruiz A:
Este es el programa que e estado buscando. Gracias
Codigazo:
Jesus Ruiz A, muchas gracias a usted por sacar el tiempito para comentar.