Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [C++] Gestione file

  1. #1

    [C++] Gestione file

    Come faccio a scaricare e caricare una lista composta da struct su un file senza dover scrivere e leggere campo per campo???
    Ho provato per scaricare sul file con:
    fout<<primo_cl->cognome<<" "<<primo_cl->nome<<" "<<primo_cl->cod_fiscale<<" "<<primo_cl->citta<<" "<<primo_cl->indirizzo<<" "<<primo_cl->num_tel;
    ma è troppo lungo!!

    Help me!!

    Rispondete il prima possibile sono in crisi....

  2. #2
    Supponiamo una struct di nome Person:
    codice:
    Person person;
    ifstream fin("tuofile.dat");
    // in un ciclo
    fin.read(reinterpret_cast<char*>( &person ), sizeof(Person));
    per la scrittura è lo stesso (naturalmente devi dichiarare un oggetto ofstream ed utilizzare il metodo write)
    <| http://cikkox.altervista.org |>
    <| GNU/Linux Registered User #365929 |>
    <| GnuPG/OpenPGP key available |>

  3. #3
    A parte che hai tutta la mia stima..
    Cosa vuol dire <char*>??

  4. #4
    Originariamente inviato da cattateo1
    A parte che hai tutta la mia stima..
    Cosa vuol dire <char*>??
    Ciao,
    ci provo, ma poi devi approndire con un buon libro (o anche su internet):
    la funzione read di ifstream richiede come primo parametro un puntatore a char, e come secondo il numero di byte da leggere.
    Quindi utilizziamo il reinterpret_cast<char*> (il cast usato per le conversioni non standard) per convertire, appunto, l'indirizzo di person in un puntatore a char*.
    Spero di essere stato chiaro.
    <| http://cikkox.altervista.org |>
    <| GNU/Linux Registered User #365929 |>
    <| GnuPG/OpenPGP key available |>

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Perdonatemi l'intrusione, ma a me la stessa cosa non funziona ... Cioè mi tira fuori una stringa che non ci azzecca niente con quella che ho inserito. E' una questione di ambiente/compilatore ? Che io sappia il reinterpet_cast non sempre va a buon fine. Io questa cosa qui la farei con l'overload degli operatori, che è sicuro al 100%. Così:
    codice:
    struct esempio
    {
    	char *b;
            int a;
    	friend ostream &operator<<(ostream &o, esempio a)
    	{
    		o << a.b << " " << a;
    		return o;
    	}
    	friend istream &operator>>(istream &i, esempio a)
    	{
    		i >> a.b >> a;
    		return i;
    	}
    };

  6. #6
    Non lo so se e' una questione di ambiente o compilatore perche' non ho provato. Comunque quel codice compilato con g++ da un risultato corretto.
    Interessante l'alternativa con gli overload degli operatori.
    <| http://cikkox.altervista.org |>
    <| GNU/Linux Registered User #365929 |>
    <| GnuPG/OpenPGP key available |>

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Probabilmente è una questione di ambiente allora giacchè io sono su Windows e mi tira fuori 3 caratteri indecifrabili. Comunque io personalmente preferisco sempre utilizzare l'overload degli operatori per avere la massima sicurezza/flessibilità e poi vuoi mettere lo sfizio di usare le prerogative OO del linguaggio ? Poi, de gustibus non disputandum est (è la seconda volta che lo dico oggi )

    P.S.: Sono sicuro che reinterpret_cast, negli ambienti in cui funziona, è molto più veloce della soluzione che ho proposto io.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.