C ++ écrasant des données dans un fichier à une position particulière

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.