Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Tietueen tallentaminen tiedostoon (c++)

haamukuva [31.01.2005 13:17:11]

#

Kuten jo otsikko sanoo, ongelma on tietueen tallentaminen tiedostoon käyttäen fstream kirjastoa.
Voisko joku pistää jonkun pienen esimerkin?

Niin, ja jos millään jaksaa.
Myös lukemisesta.

acorn [31.01.2005 14:01:47]

#

En oikein tuota sanastoa osaa, mutta olen ymmärtänyt, että tietue = struct. Jos tämä pitää paikkansa, niin sitä ei suoraan voi tallentaa tiedostoon. Jokainen sen sisältämä muuttuja tai vastaava pitää tallentaa erikseen ja lataaminenkin on hieman vaikeampaa, sillä jokainen arvo on eriteltävä luetusta tiedosta ja tallennettava oikeaan paikkaan.

esakom [31.01.2005 14:22:51]

#

Netistä löydettyä... Lisätietoja löytyy osoitteesta:
http://www.codeguru.com/forum/showthread.php?s­=875bb1ba8da80f974096e009a11c4bb3&p=836751#post836751

#include <string>
#include <fstream>

struct s
{
  int    x;
  float  f;
  double d;
  char   c;
  char   s[50];
};

void write( const std::string& file_name, s& data )
{
  std::ofstream out( file_name.c_str() );
  out.write( reinterpret_cast<char*>(&s), sizeof(s) );
}

void read( const std::string& file_name, s& data )
{
  std::ifstream in( file_name.c_str() );
  in.read( reinterpret_cast<char*>(&s), sizeof(s) );
}

int main()
{
  s myStruct;
  read( "test.dat", myStruct );
  write( "test.dat", myStruct );
}

tuosta näkee periaatteen, en tosin ole itse koittanut, jos tulee ongelmia kysy lisää.

Linkku [31.01.2005 14:37:46]

#

esakom kirjoitti:

Netistä löydettyä... Lisätietoja löytyy osoitteesta:
http://www.codeguru.com/forum/showthread.php?s­=875bb1ba8da80f974096e009a11c4bb3&p=836751#post836751

- -

tuosta näkee periaatteen, en tosin ole itse koittanut, jos tulee ongelmia kysy lisää.

Tulee ongelmia:

g++ main.cpp kirjoitti:

main.cpp: In function `void write(const std::string&, s&)':
main.cpp:16: error: parse error before `)' token
main.cpp: In function `void read(const std::string&, s&)':
main.cpp:22: error: parse error before `)' token
main.cpp:30:2: warning: no newline at end of file

esakom [31.01.2005 14:48:58]

#

Taisi olla buginen esimerkki, sori pojat, koitin vähän korjata, kokeile tähän tyyliin (tämä ainakin toimii mun VC6:ssa):

#include <string>
#include <fstream>

struct tietue
{
  int    x;
  float  f;
  double d;
  char   c;
  char   s[50];
} ;

void write( const std::string& file_name, tietue& data )
{
  std::ofstream out( file_name.c_str() );
  out.write( reinterpret_cast<char*>(&data), sizeof(tietue) );
}

void read( const std::string& file_name, tietue& data )
{
  std::ifstream in( file_name.c_str() );
  in.read( reinterpret_cast<char*>(&data), sizeof(tietue) );
}

int main()
{
  tietue myStruct;

  //read( "test.dat", myStruct ); // ei voi lukea jos tiedostoa ei vielä ole olemassa
  // sijoita tietueeseen ensin jotain dataa ja sitten...

  write( "test.dat", myStruct );
  return 0;
}

haamukuva [31.01.2005 15:09:48]

#

haamukuva kiittää ja poistuu harjoittelemaan :)

timok16 [03.02.2005 18:46:28]

#

struct TESTI tdsto;
FILE *fileptr;

if ((fileptr = fopen("koe.dat","r+b")) == NULL) {
if ((fileptr = fopen("koe.dat","w+b")) == NULL) {
 printf("\nTiedostoa ei olemassa\n");
	exit (0);
   }
}

/****tähän kyselyä asiakkaan tiedoista*/
void add_asiakas()
{
if (fseek(fileptr, 0, SEEK_END) == 0) fwrite(&tdsto,     sizeof(tdsto), 1, fileptr);
}

täs yks tapa tallettaa tietueen tiedot kerralla tiedostoon

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta