Vraag & Antwoord

Programmeren

C++ fstream - invoegen in bestand zonder te overschrijven

5 antwoorden
  • Hoi, ik ben bezig met een programmaatje in C++ dat een bestand inleest, en bij een bepaalde regel wat weg gaat schrijven. De juiste regel opzoeken voor wegschrijven doe ik dmv een comment wat daat staat, en waar ik dan een strcmp op doe. Bij de volgende regel wil ik dan gaan schrijven. Het probleem is nu alleen dat er dan standaard overschreven wordt. Dat moet niet, er moet worden ingevoegd. Hoe kan ik dit voor elkaar krijgen? Ik zal hieronder ook nog een stukje van de code dumpen, voor de duidelijkheid: [code:1:25031cb89c] fstream file(&quot;bestand.txt&quot;, ios::in | ios::out); if(file.is_open()) { while(!file.eof()) { file.getline(buffer, 1024); if (strncmp(buffer, &quot;//--begin&quot;, 9) == 0) file &lt;&lt; &quot;iets&quot;; } file.close(); } [/code:1:25031cb89c] als er nu in het bestand zoiets stond: blablabla //--begin nog meer bla bla Dan zal er na het runnen staan: blablabla //--begin ietsmeer bla bla Ik heb van alles geprobeerd, maar ik kan nergens vinden hoe ik dit ui kan schakelen... Iemand een idee?? [edit] titel aangepast in de hoop op meer respons [/edit] <font size=-1>[ Dit bericht is bewerkt door: rkars op 2002-05-06 11:48 ]</font>
  • de regel: fstream file(&quot;bestand.txt&quot;, ios::in | ios::out); zou je kunnen veranderen in: fstream file(&quot;bestand.txt&quot;, ios::in | ios::out | ios:app); Dit betekend dat ie append (toevoegt). Ik weet alleen niet uit m'n hoofd of dat alleen aan het einde van het bestand is of ook in 't midden.
  • Ah... bedankt voor je antwoord! Ik was al bang dat ik het topic een klein kickje moest gaan geven. Ik had (dacht ik) ios::app al geprobeerd. Voor de zekerheid heb ik het echter nogmaals geprobeerd, maar helaas, de 'file-pointer' staat hiermee gelijk aan het eind van het bestand. Dit heb ik even gecontroleerd dmv een tellp(). Op het moment dat ik de file-pointer met een seekp(...) zou zetten naar het juiste beginpunt wordt er weer gewoon overschreven. Het enige wat ik nog zou kunnen verzinnen is dat ik alles onder //--begin naar een ander tekstbestand wegschrijf, dan de tekst toevoeg, om vervolgens het zojuist weggeschreven tekstbestand eronder te gaan kopieren. Dit komt echter de performance niet echt ten goede, zeker niet als de lengte op gaat lopen. Zou er dan echt geen andere manier zijn binnen C++?
  • Append betekent toevoegen en dat gebeurt aan het einde van het bestand. Volgens mij kun je niet iets toevoegen in het midden van een bestand zonder dat je een nieuw bestand aanmaakt. Als dit nieuwe bestand gesloten is dan kun je het origineel verwijderen of hernoemen en het nieuwe bestand de naam van het originele bestand geven.
  • Dat zou balen zijn als het niet mogelijk is. Misschien maar eens gaan kijken naar alternatieven!

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.