J’ai du mal à écraser des données dans un fichier en c ++. le code que j’utilise est
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;
}
Le problème est que même après avoir utilisé seekp, les données sont toujours écrites à la fin. Je veux les écrire à une position particulière. Et si je n’ajoute pas fstream :: app, le contenu du fichier est effacé. Merci.
Le problème vient de fstream::app
– il ouvre le fichier à append, ce qui signifie que toutes les écritures vont à la fin du fichier. Pour éviter que le contenu ne soit effacé, essayez également d’ouvrir avec fstream::in
, ce qui signifie ouvrir avec fstream::binary | fstream::out | fstream::in
fstream::binary | fstream::out | fstream::in
fstream::binary | fstream::out | fstream::in
.
Vous voulez quelque chose comme
fstream fout( "hello.txt", fstream::in | fstream::out | fstream::binary ); fout.seek( offset ); fout.write( "####", 4 );
fstream::app
dit de passer à la fin du fichier avant chaque opération de sortie. Ainsi, même si vous recherchez explicitement une position, l’emplacement d’écriture est forcé à la fin lorsque vous seekp( 0, ios_base::end );
write()
( seekp( 0, ios_base::end );
).
cf. http://www.cplusplus.com/reference/iostream/fstream/open/
Une autre chose à noter est que, puisque vous avez ouvert le fichier avec fstream::app
, tellp()
devrait renvoyer la fin du fichier. Donc seekp( pos + 5 )
devrait essayer de dépasser la position actuelle de fin de fichier.