Tentative d'insertion d'une chaîne au milieu d'un fichier, à partir de sa fin.Peut être inséré dans un fstream, mais pas dans un iostream
Le code suivant fonctionne avec un fstream, mais pas avec un iostream (dans ce cas, la chaîne de sortie est égale à l'entrée une):
// File contents: "abcdefghijklmnopqrstxyz"; "uvw" missing
// 1 - OK
//fstream iofs(fPath, ios_base::in | ios_base::out);
// 2 - Same output
filebuf fileBuffer;
iostream iofs(&fileBuffer); // generic output stream
fileBuffer.open(fPath.c_str(), ios_base::in | ios_base::out | ofstream::app);
iofs.rdbuf(&fileBuffer);
iofs.seekg(0, ios_base::end);
iofs.seekp(0, ios_base::end);
for(int i = 1; i < 20; ++i)
{
iofs.seekg(-i, std::ios_base::end);
char c = char(iofs.peek());
if(c == 't') {
iofs.seekp(-i + 1, std::ios_base::end);
iofs << "uvw"; // add missing token
iofs << "xyz"; // append pre-existing token
break;
}
}
sortie:
Cas 1: Début = abcdefghijklmnopqrstxyz; Résultat = abcdefghijklmnopqrstuvwxyz
Cas 2: Début = abcdefghijklmnopqrstxyz; Résultat = abcdefghijklmnopqrstxyz
Est-ce que je fais quelque chose de mal, ou je ne peux tout simplement pas faire un insert dans un iostream?
Vérifiez-vous le contenu du flux à la fin ou du fichier? Juste deviner ici, mais peut-être le fstream fait un vidage implicite sur la destruction ou la synchronisation de fichiers et l'iostream pas. Vous pouvez essayer une couleur à la fin. – Hayt