Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

C++ fstream - invoegen in bestand zonder te overschrijven

Arend_
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("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 ]
  • 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.
  • 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

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