Ga naar inhoud

C++ fstream - invoegen in bestand zonder te overschrijven


Aanbevolen berichten

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("bestand.txt", ios::in | ios::out); if(file.is_open()) { while(!file.eof()) { file.getline(buffer, 1024); if (strncmp(buffer, "//--begin", 9) == 0) file << "iets"; } 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] [ Dit bericht is bewerkt door: rkars op 2002-05-06 11:48 ]
Link naar reactie
de regel: fstream file("bestand.txt", ios::in | ios::out); zou je kunnen veranderen in: fstream file("bestand.txt", 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.
Link naar reactie
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++?
Link naar reactie
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.
Link naar reactie
Als je records van je RA-gegevensfile d.m.v. een ketting verbindt, dan kun je records wissen en toevoegen zonder de ander records op te schuiven. Voor het niet-sequentieel zoeken in zo'n file moet je er daarnaast zoekfile's op na houden. Elke zoekfile bevat 1 veld van de records waarop je wilt zoeken en het bijbehorende recordnr van de gegevensfile. Voordeel van dit systeem is dat je in de zoekfiles niet alle recordnrs hoeft aan te passen omdat in de gegevensfile de records niet verplaats worden. Misschien is dit wat te beknopt, maar anders wordt het een heel verhaal. Ik wil het eventueel wel verder uitwerken. Of er in de C++ bibliotheek containers zijn met zo'n structuur weet ik niet. _________________ Arend. [ Dit bericht is bewerkt door: Arend_ op 2002-05-12 01:03 ]
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...