Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Casvill en 20 Diciembre 2017, 03:49 AM

Título: ¿Cómo añadir texto en una parte específica de un archivo sin sobreescribir?
Publicado por: Casvill en 20 Diciembre 2017, 03:49 AM
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
Título: Re: ¿Cómo añadir texto en una parte específica de un archivo sin sobreescribir?
Publicado por: MAFUS en 20 Diciembre 2017, 20:06 PM
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.