[c++] Een vector lezen en schrijven naar een file

Pagina: 1
Acties:

  • Infern0
  • Registratie: September 2000
  • Laatst online: 20-08 13:36

Infern0

Hou die ontzettende rust!!

Topicstarter
Ik heb al wel wat gezocht op GoT, maar niet echt iemand met hetzelfde probleem.

Ik zal het probleem even uitleggen met de code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
///foo.h/////
class foo{
    private:
           int a;
           int b;
    public:
           void vullen();
           void lezen();
           int fileopen();
           int filewrite();
           vector<foo*> bar
}
///foo.cpp/////
#include "foo.h"
int foo::fileopen ()
{
    const char *bestandnaam = "rooster.dat";
    ifstream inbestand (bestandnaam, ios::binary);
    inbestand.read( (char*) & bar, sizeof (foo) );
    return 0;
}

int foo::filewrite()
{
  const char *bestandnaam = "rooster.dat";
  ofstream uitbestand( bestandnaam, ios::binary);
  cout << " bestand wegschrijven " << endl;
  uitbestand.write( (char *) & bar, sizeof(foo) ) ;
  cin.get();
  return 0;
}

Dit ophalen en wegschrijven werkt momenteel niet. Ik d8 dat ik die vector hetzelfde kon behandelen als een object, maar blijkbaar niet.
Iemand een idee om dit op te lossen?

http://www.bsdfreaks.nl Home site: http://rob.lensen.nu /me was RobL


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:59
En als je alle objecten die zich in uw vector beginnen overloopt en dan ieder object wegschrijft?

zoiets dus bevoorbeeld:
code:
1
2
3
4
for (int i = 0; i < bar.count; i++)
{
  uitbestand.write ( (foo*)&bar[i], sizof(bar));
}

Disclaimer: dit is zo uit m'n hoofd ingetikt. Syntax-fouten, properties die niet bestaan ed kunnen voorkomen. Het is gewoon bedoeld als tip, hint, idee, whatever.
}

https://fgheysels.github.io/


  • Infern0
  • Registratie: September 2000
  • Laatst online: 20-08 13:36

Infern0

Hou die ontzettende rust!!

Topicstarter
Voor het weg schrijven wel goed denk ik.
Alleen hoe moet het dan als ik hem wil in lezen?
Ik weet toch niet hoeveel object er in mijn binaire file staan?

http://www.bsdfreaks.nl Home site: http://rob.lensen.nu /me was RobL


Verwijderd

Je datastructuur is recursief, gebruikt dynamisch gealloceerd geheugen (vector), en heeft pointer verwijzingen. Bij het opslaan/laden van dit soort constructies komt meer kijken dan het simpelweg binair wegschrijven/inlezen van instances.

Je zult zowieso eerst een formaat moeten verzinnen om de data in op te slaan. Je zult onder andere een mechanisme moeten verzinnen om de relaties tussen de weggeschreven objecten te behouden. Pas als je deze zaken conceptueel hebt uitgewerkt kun je fatsoenlijke save/load code gaan schrijven.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 00:27
.read() en .write() werken alleen met de meest primitieve objecten (char, short, int, etc ). char* begint al een probleem te worden.

Check ostream_iterator en std::copy().

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

je kan toch gewoon de << en >> operators overriden voor je foo object? dan gewoon de hele vector uitlezen en naar de stream schrijven (en andersom voor inlezen natuurlijk :) )
Of gewoon read(ifstream) en een write(ofstream) functies maken als je de operator voor normale bitshifts wil gebruiken (lijkt me in dit geval vrij nutteloos, maar er is uit syntactisch oogpunt wel iets voor te zeggen)

De functies kan je dan ook recursief aanroepen :)
Pagina: 1