Hola, estoy algo confuso con esos 2 modos, por lo que leí ios::out crea un archivo en modo salida, y si existe lo sobrescribe, ios::ate abre un archivo en modo salida y se desplaza al final del archivo pero se puede mover a través de él, pero tengo este código de practica que estuve leyendo e ios::ate borra todo lo existia en el archivo
#include <iostream>
using std::cerr;
using std::cin;
using std::cout;
using std::endl;
using std::ios;
#include <fstream> // flujo de archivo
using std::ofstream; // flujo de archivo de salida
#include <cstdlib>
using std::exit;
int main()
{
// el constructor de ofstream abre el archivo
ofstream archivoClienteSalida( "clientes.dat", ios::ate ); // originalmente era ios::out y lo coloque ios::ate para probar
// sale del programa si no puede crear el archivo
if ( !archivoClienteSalida ) // operador ! sobrecargado
{
cerr << "No se pudo abrir el archivo" << endl;
exit( 1 );
}
cout << "Escriba la cuenta, nombre y saldo." << endl
<< "Escriba fin de archivo ( Ctrl + Z ) para terminar la entrada.\n?";
int cuenta;
char nombre[30];
double saldo;
// lee la cuenta, nombre y saldo de cin y despues los coloca en el archivo
while ( cin >> cuenta >> nombre >> saldo )
{
archivoClienteSalida << cuenta << ' ' << nombre << ' ' << saldo << endl;
cout << "?";
}
return 0;
}
en vez de "ate" usa "ios::app". A ver si te va.
Por cierto, que veo que pones muchos "using". Te llega con poner "using namespace std;".
ios::app sí almacena los datos al final del archivo, pero siempre lo hace al final por lo que he leído, en cambio ios::ate debería moverse a través de este y agregar los datos en cualquier parte.
Lo del exceso de "using" es por como había dicho anteriormente, era un código de practica que leí.
Pero tal como usas en ese código ofstream, te debería servir con ios::app.
Sí, pero el punto es que, ¿ si uso ios::ate, no debería posicionarse al final sin sobrescribir el contenido?
O saber el equivalente al modo "r+" de la función fopen en C, ya que ios::app funcionaria como "a+", y pensé que ios::ate funcionaria como "r+", perro viendo como funciona ese código veo que no, o quizás me esta faltando algo
Para que no te sobrescriba, tienes que abrir un fstream con ambas ios::out e ios::in, más el ios::ate, claro.
Gracias =)