2016-06-23 6 views
0

Ich versuche Text zu einer bestimmten Position in C++ mit ofstream und seekp hinzufügen. Es hängt jedoch immer an das Ende der Datei an.Text kann nicht an eine bestimmte Position in C++ angehängt werden

Ich habe alredy versuchte mit file.write(string, len) zu schreiben, aber das Ergebnis ist so das gleiche.

Mein Code:

void printHistory(int media, time_t timestamp){ 
    ofstream file("history.json", ios::app); 
    long initial_pos = file.tellp(); 
    file.seekp(initial_pos-3); 
    file << ", [" << timestamp << "," << media << "]]\n}"; 
    file.close(); 
} 
+0

Sicher, die 'operator <<()' nicht über die 'seekp()' Anruf kümmern. Sie müssen stattdessen 'file.write()' 'verwenden. Aber pass auf: das überschreibt alles an dieser Stelle. –

+0

Ich habe das schon probiert. Das Ergebnis ist so das gleiche ... – Luiz

+0

Veröffentlichen Sie bitte [MCVE], damit jeder Ihr Problem reproduzieren kann. –

Antwort

0

Wie wäre es so etwas wie:

fstream fs ("fred.txt", ios::in | ios::out); 
fs.seekg (0, ios::end); 
streamoff filesize = fs.tellg(); 
fs.seekp (filesize - 3); // locate yourself 3rd char from end. 
fs.write("X", 1); 
fs.close(); 
+0

Arbeitete für mich, danke! – Luiz

+0

Es ist im Allgemeinen besser, auch zu sagen, was Ihr Code anders macht und warum, und nicht nur eine Antwort mit nur Code und keine Erklärung, wie es das Problem löst. – hyde

+0

@hyde Generell stimme ich zu. – schenken

0

Allgemeinen auf "Einfügen" Sie in einem temporären Stream oder Datei zu schreiben. Sie können nicht aktiv in der Mitte aktualisieren.

Viele STL-Typen unterstützen das Einfügen, aber es wird über Prozesse hinter den Kulissen simuliert.

Pseudocode:

pos = some_int_point_in_file 
open(file) as f and open(tmp) as t: 
    read f into t until pos then 
     insert whatever 
    finishing reading the rest of f into t 
swap file and tmp