2011-09-04 94 views
6

Tengo problemas para sobrescribir algunos datos en un archivo en C++. el código que estoy usando esC++ sobrescribir datos en un archivo en una posición particular

int main(){ 
    fstream fout; 
    fout.open("hello.txt",fstream::binary | fstream::out | fstream::app); 
    pos=fout.tellp(); 
    fout.seekp(pos+5); 
    fout.write("####",4); 
    fout.close(); 
    return 0; 

}

el problema es incluso después de usar seekp, los datos se escriben siempre en el end.I quieren escribirlo en una posición particular. Y si no agrego fstream :: app, el contenido del archivo se borrará. Gracias.

+0

¿Cuál es la posición exacta de los datos que desea sobreescribir? – Flinsch

Respuesta

8

El problema es con fstream::app - abre el archivo para anexar, lo que significa que todas las escrituras van al final del archivo. Para evitar que se borre el contenido, intente abrir también con fstream::in, es decir, abrir con fstream::binary | fstream::out | fstream::in.

+0

pero no es fstream :: in para leer de la transmisión, ¿cómo podré escribir en la transmisión usando eso? – karyboy

+2

Si usa tanto 'fstream :: in' como' fsteam :: out', abrirá el archivo para lectura y escritura, lo que significa que se abrirá para escribir sin borrar el contenido anterior. –

+0

Gracias compañero, eres un salvador ..... – karyboy

2

¿Quieres algo así como

fstream fout("hello.txt", fstream::in | fstream::out | fstream::binary); 
fout.seek(offset); 
fout.write("####", 4); 

fstream::app dice que para pasar a la final del archivo antes de cada operación de salida, por lo que a pesar de que usted busca explícitamente a una posición, la ubicación escriba será forzado hasta el final cuando usted hace el write() (que es seekp(0, ios_base::end);).

cf. http://www.cplusplus.com/reference/iostream/fstream/open/

Otra cosa a tener en cuenta es que, desde que abrió el archivo con fstream::app, tellp() debe devolver el final del archivo. Por lo tanto, seekp(pos + 5) debería intentar moverse más allá de la posición actual del final del archivo.

+0

, tú también para señalar eso ... ahora todo funciona según lo previsto ... – karyboy

Cuestiones relacionadas