C++ Dateioperation
-
Hallo,wie kann ich einen Text an den Anfang einer (bereits bestehenden) Datei schreiben?
char verd[] = "test"; fstream lo("datei.txt",ios::out|ios::in); lo.seekp(0,ios::beg); lo << verd; lo.close();Wenn ichs so versuche wird aber der Anfang der Datei überschrieben.
-
3 Secunden auf google gesucht: http://www.c-plusplus.net/forum/288670-full
-
Du öffnest die Datei zum überschreiben, mach es lieber so:
ifstream file("test.text"); //Datei nur zum lesen öffnen ofstream file("test.text"); //Datei zum überschreiben öffnen ofstream file("test.text", ios::app); //Datei zum bearbeiten öffnen
-
Ich glaub, dass ios::ate eher ist, was der Threadersteller sucht...
-
Wenn Du ganz am Anfang etwas einschieben willst, mußt Du die ganze Datei neu schreiben.
-
std::stringstream ss; ss << das_was_an_den_anfang_soll << std::ifstream("datei.txt").rdbuf(); std::ofstream stream("datei.txt"); stream << ss.str();(ungetestet)
-
Danke,aber gibt es noch eine andere Möglichkeit,denn wenn man das so auf eine 1gb große Datei anwendet,müssen 1gb in den arbeitsspeicher kopiert und dann wieder zurückgeschrieben werden.
-
Schreib halt direkt in eine neue Datei...
-
Dann muss ja trotzdem die ganze andere datei kopiert werden ...
-
So ist es.
-
Gibt es denn keine andere Möglichkeit als die ganze Datei umzukopieren?
-
Man könnte das ganze in-place machen. Aber das wäre a) viel friemeliger und b) man müßte die Datei trotzdem komplett lesen und schreiben.
-
david_k schrieb:
Gibt es denn keine andere Möglichkeit als die ganze Datei umzukopieren?
Nein. Dateien funktionieren eben so. Das ist eben so gedacht, dass man einfach hinten dranhängen oder überschreiben kann, aber vorne dranhängen ist eine ungewöhnliche Operation. Denk dir eben was aus, dass du nicht mehr vorne anhängen brauchst. Womit wir beim Thema sind: Wofür meinst du, das zu brauchen?
-
Falls das sehr riesige Datenmengen sind, kann man sich überlegen eine Verwaltungsdatei mit Verweisen auf die Dateien zu etablieren. Die wäre klein und man müsste zwar die gesamte Datei neuschreiben, um am Anfang einen Verweis einzufügen, das wäre aber vernachlässigbarer Aufwand.
Aber vermutlich wäre das hier überdimensioniert.