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.
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.
Netistä löydettyä... Lisätietoja löytyy osoitteesta:
http://www.codeguru.com/forum/showthread.php?s=875bb1ba8da80f974096e009a11c4bb3&p=836751
#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ää.
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
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 kiittää ja poistuu harjoittelemaan :)
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
Aihe on jo aika vanha, joten et voi enää vastata siihen.