¿Cómo añadir texto en una parte específica de un archivo sin sobreescribir?

Iniciado por Casvill, 20 Diciembre 2017, 03:49 AM

0 Miembros y 1 Visitante están viendo este tema.

Casvill

Puedo añadir texto al final del texto, pero, cómo hago para escribir en una parte del archivo sin sobreescribir lo que haya ahí? Me explico.

Archivo.txt:
dato 1
dato 2
dato 3

Ahora quiero escribir después del dato 2, posiciono el cursor y justo después quiero agregar "dato x". Tendría que quedar algo como:

Archivo.txt:
dato 1
dato 2
dato x
dato 3

pero lo que me ocurre es que se sobreescribe lo que hay después de dato 2 así:

Archivo.txt:
dato 1
dato 2
dato x

Cómo hago para que no se sobreescriba? y que cada vez que quiera agregar algo después de dato 2 quede algo así:

Ejemplo agregando primero "dato x" y luego "dato y":

Archivo.txt:
dato 1
dato 2
dato y
dato x
dato 3


Código (cpp) [Seleccionar]
void Telefono::crearTelefono(string clase,string inicio,string fin)
{
    string comparar;
    cout<<"Numero: ";cin>>num;
    cout<<"Indicativo: ";cin>>indicativo;
    cout<<"Tipo: ";cin>>tipo;

    string datos=getDatosTelefono();
    fstream archivo;
    if(clase == "agencias")
    {
        archivo.open("agencias.txt");
    }
    else if(clase == "aerolineas")
    {
        archivo.open("aerolineas.txt");
    }

    if(archivo.is_open())
    {
        while(!archivo.eof())
        {
            getline(archivo,comparar);
            if(comparar == inicio) // todo esto es para buscar el lugar donde quiero agregar texto
            {
                while(!archivo.eof())
                {
                    getline(archivo,comparar);
                    if(comparar==fin) // todo esto es para buscar el lugar donde quiero agregar texto
                    {
                        archivo<<datos; //una vez encontrado el lugar, que me agregue texto ahí.
                        archivo.close();
                    }
                }
            }
        }
        archivo.close();
    }
    else
    {
        cout<<"Error al intentar abrir el fichero.";
    }
}
//----------------------------------------------------------
string Telefono::getDatosTelefono()
{
    string r=tipo+": ("+indicativo+") "+num+"\n";
    return r;
}



Gracias de antemano!  ;D

MAFUS

Puedes hacerlo de dos formas:
1. Cargar todo el texto en memoria, hacer el añadido y guardarlo todo otra vez.
2. Puedes leer el archivo línea a línea e ir guardando en otro. Donde sea que necesites escribes la información nueva y sigues leyendo del archivo original y guardarlo en el nuevo. Después borras el original y renombras el nuevo.