/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Gem en structer
Fra : Jeppe Sørensen


Dato : 21-03-01 20:27

Hey


Jeg har længe tænkt på hvordan man hurtigst og nemmest kan gemme en
structer i fil.
Og hvordan man hurtigst og nemmest kan opdater filen hvis 1 af
variablerne i structer
bliver ændret.

Så jeg tænke at der må være nogen herinde som kender en hjemmeside med
en FAQ
eller en tutorials om hvordan man kan gøre. Helst til Linux/Unix

Hvis nogen af jer har nogen eksempeler på hvordan man kan gøre i "C"
eller "c++ "(bruge class's) er I velkommen til at mail dem til
jeppe@post10.tele.dk


Hilsen Jeppe Sørensen


 
 
Igor V. Rafienko (22-03-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 22-03-01 16:06

* Jeppe Sørensen

[snip]

> Jeg har længe tænkt på hvordan man hurtigst og nemmest kan gemme en
> structer i fil.


Hva er kravene til applikasjonen? Hva skal kunne lese denne filen
tilbake (samme programmet på samme arkitektur, noe annet)? Hvor
portabelt vil du ha dette? Hva inneholder struct'en? (innlysende nok
blir det ikke-trivielt å "linearisere" en sirkulær liste). Forresten,
"hurtigst" og "nemmest" er oftest motstridende. Dersom arv er med i
bildet, blir det enda mer ekkelt.


> Og hvordan man hurtigst og nemmest kan opdater filen hvis 1 af
> variablerne i structer bliver ændret.


Portabelt? Rå minnedump til filen er nødvendigvis det raskeste dersom
det er kun tiden å eksekvere operasjonen som er interessant, men jeg
ville ikke anbefale denne metoden -- det virker "liksom", men ikke
akkurat: på Linux tar struct'en under 16 bytes, mens på sparc er
tallet 24. Naturligvis har man _ingen_ garanti for at en
compiler-switch ikke får hele greia til å tryne (fx. dersom man gir
beskjed om å pakke struct'er fra en run til en annen). Og det at g++
og CC5.1 har tilfeldigvis samme struct layout kan man nok ikke regne
med i det generelle tilfellet.




Kode
#include <iostream>
#include <fstream>
#include <string>


struct A
{
A( int i, double j, int k ) : x( i ), f( j ), y( k ){}
A(){}
private:
int x;
protected:
double f;
private:
int y;

friend std::ostream& operator<<( std::ostream&, const A& );
};


std::ostream&
operator<<( std::ostream &os, const A &s )
{
os << "<struct A: " << s.x << "; " << s.f << "; " << s.y << ">\n";
return os;
}




void
read( const char *fname )
{
A a;

std::ifstream ifs( fname );

if ( !ifs.read( (char*)&a, sizeof a ) ) {
   std::cerr << "failed to read\n";
}

std::cout << a;
}


void
write( const char *fname )
{
A a( 10, 42.5, 12 );

std::ofstream ofs( fname );

if ( !ofs.write( (char*)&a, sizeof a ) ) {
   std::cerr << "failed to write\n";
}

std::cout << a;
}


int
main( int argc, char *argv[] )
{
if ( argc != 3 ) {
   std::cerr << "foo\n";
   return 1;
}

if ( std::string( argv[1] ) == "read" )
   read( argv[2] );
else
   write( argv[2] );
}






ivr
--
Death by snoo-snoo

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste