Der Versuch, einen String in der Mitte einer Datei einzufügen, beginnend mit seinem Ende.Kann in einen Stream, aber nicht in einen Iostream eingefügt werden
Der folgende Code arbeitet mit einem fstream, aber nicht mit einem Iostream (in diesem Fall der Ausgabezeichenfolge zu dem Eingang ist gleich eins):
// 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;
}
}
Output:
Fall 1: Begin = abcdefghijklmnopqrstxyz; Ergebnis = abcdefghijklmnopqrstuvwxyz
Fall 2: Begin = abcdefghijklmnopqrstxyz; Ergebnis = abcdefghijklmnopqrstxyz
Mache ich etwas falsch, oder ich kann einfach nicht einfügen in einem Iostream?
Überprüfen Sie den Inhalt des Streams am Ende oder der Datei? Ich rate nur hier, aber vielleicht macht der fstream einen impliziten Flush auf Zerstörung oder eine Dateisynchronisation und den Iostream nicht. Sie können eine Spülung am Ende versuchen. – Hayt