Lettura/Scrittura su file di vector di oggetti

di il
4 risposte

Lettura/Scrittura su file di vector di oggetti

Salve a tutti. Sto cercando di capire come utilizzare i file in c++. A parte le operazioni semplici di lettura e scrittura di interi, stringhe e altro, adesso vorrei capire come leggere/scrivere su un file un vector di puntatori a oggetti
(vector <students*> ad esempio, students è una classe a parte ovviamente). Che tipo di file è meglio utilizzare? E soprattutto, come effettuo la lettura e la scrittura dell'intero vector su un file binario? Grazie a tutti

4 Risposte

  • Re: Lettura/Scrittura su file di vector di oggetti

    Dipende da cosa contiene la classe Students (puntatori? Oggetti STL?)
    E' un punto importante perché la scrittura binaria su file è supportata solo per:
    array di char --> char pippo[N]
    tipi numerici (int, long etc)
    aggregati composti dai due sopra (struct e union, ma non classi).
    Negli altri casi è necessario fare delle manipolazioni sui dati la cui complessità dipende dai dati membro della classe da scrivere sul file.
    In ogni caso non puoi scrivere direttamente un vector<> STL su file, ne tantomeno leggerlo.
    Posta come fatta Students.
  • Re: Lettura/Scrittura su file di vector di oggetti

    La classe (che non è students), contiene solo 2 string e un intero, più le funzioni varie.
    Quindi non potendo scrivere direttamente il vettore, dovrei scrivere un oggetto per volta e poi memorizzarlo nel vettore?
  • Re: Lettura/Scrittura su file di vector di oggetti

    Ma queste string sono std::string oppure ASCIIZ string (le string del C per capirsi)?
    E se sono queste ultime sono allocate dinamicamente oppure sono a dimensione fissa (tipo char pippo[N])?
    In ogni caso la cosa più semplice è aprire un file formato testo e scriverci dentro i dati in forma leggibile e separati da un carattere (probabilmente usi nome, cognome, età) per cui una semplice virgola può bastare (lo spazio può non andare bene se si trova in mezzo a una stringa).
    Il meccanismo che userei io è un overload degli operatori << per la scrittura e >> per la lettura, ma è sufficente un:
    
    X << obj->getNome() << "," << obj->getCognome()<<"," << obj->getEta() << endl;
    
    dove X è lo stream di scrittura (cout per il video, o un fstream per il file).
    Per la lettura occorre leggere una riga per volta, estrarre i vari dati tra le virgole e inserirli nella classe.
    Quindi non potendo scrivere direttamente il vettore, dovrei scrivere un oggetto per volta e poi memorizzarlo nel vettore?
    Si.
  • Re: Lettura/Scrittura su file di vector di oggetti

    Sono std::string.
    Ok mi sa che seguirò il tuo consiglio e utilizzerò un file .txt memorizzando i dati di ogni oggetto, invece che un file binario
    Mi sembra decisamente la soluzione più semplice
Devi accedere o registrarti per scrivere nel forum
4 risposte