Myślę, że to powinno być całkiem proste, ale moje googlowanie nie pomogło do tej pory ... Muszę napisać do istniejącego pliku w C++, ale niekoniecznie na końcu pliku.Jak pisać na środku pliku w C++?
Wiem, że gdy chcę tylko dołączyć tekst do mojego pliku, mogę przekazać flagę ios:app
podczas wywoływania open
w moim obiekcie strumieniowym. Jednak to tylko pozwala mi pisać na samym końcu pliku, ale nie na jego środku.
Zrobiłem krótki program do zilustrowania problemu:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
string path = "../test.csv";
fstream file;
file.open(path); // ios::in and ios::out by default
const int rows = 100;
for (int i = 0; i < rows; i++) {
file << i << "\n";
}
string line;
while (getline(file, line)) {
cout << "line: " << line << endl; // here I would like to append more text to certain rows
}
file.close();
}
Możesz chcieć użyć indeksowanej biblioteki plików (np. [GDBM] (http://www.gnu.org.ua/software/gdbm/)) lub [sqlite] (http://sqlite.org/) , lub nawet pełnowartościowa baza danych ([PostgreSQL] (http://postgresql.org/), [MongoDB] (http://mongodb.org/) ....) –
Standardowy sposób zmiany plików: odczyt wejścia plik, proces, zapisz do nowego pliku wyjściowego, po pomyślnym zastąpieniu pliku wejściowego plikiem wyjściowym. Istnieją "szybsze" alternatywy (jak ios :: app), ale nie są one dla każdej sytuacji. – stefaanv
Czy to już nie zostało tu zadane milion razy? –