Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80

    [C++] Lettura / scrittura su file binari

    Ciao a tutti,
    non mi è molto chiaro come lavorare con i file binari in C++.
    Io vorrei scrivere su di un file una struttura, ma per imparare ho iniziato scrivendo una variabile di tipo int.

    Ecco come la scrivo:

    codice:
    ofstream file;
    file.open(temp.attuale, ios::binary);
    
    ...
    
    char tipo = (char)temp.type; // temp.type = int
    string t = tipo;
    /* utilizzo la variabile t per avere la lunghezza della stringa in quanto se uso
    la funzione strlen il programma va in crash... non so il perchè*/
    
    file.write(tipo, t.size());
    file.close();
    Poi per leggerlo ho scritto questo codice:

    codice:
    ifstream file;
    
    char *type;
    int len;
    
    file.open(temp.attuale, ios::binary);
    	
    file.seekg(0, ios::end);
    len = file.tellg();
    file.seekg(0, ios::beg);
    
    type = new char[len];
    file.read(type, len);
    file.close();
    Il risultato è una sequenza di caratteri invece del numero desiderato. Come mai? dove sbaglio?

  2. #2
    In c++ char e int non sono la stessa cosa.
    Per scrivere sul file puoi usare l'operatore << e >> per leggere, andando a scrivere direttamente su un int.
    ...

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Perché tutte quelle linee di codice?

    In scrittura, tra la open e la close, basta

    file.write((char *)&temp.type, sizeof(int));

    e in lettura

    file.read((char *)&temp.type, sizeof(int));
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80
    Funziona
    Per scrivere ho usato

    file << temp.type;

    e per leggere

    int type;
    file >> type;

    Per scriverci una struttura è la stessa cosa? Oppure devo scrivere ogni singola variabile contenuta in essa?
    Esempio: io ho la struttura temp nel mio programma. Per salvarla / rileggerla:

    codice:
    //SCRITTURA
    ofstream file;
    file.open(temp.attuale, ios::binary);
    file << temp;
    file.close();
    
    //LETTURA
    ifstream file:
    file.open(temp.attuale, ios::binary);
    file >> temp;
    file.close();
    E' giusto così?

  5. #5
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Tecnicamente << e >> sono per i file di testo, infatti attuano varie conversioni su caratteri quali \n a seconda del sistema in cui ti trovi...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80
    Già comunque funziona anche come ha detto oregon
    E se scrivessi:

    codice:
    ofstream file;
    file.open(temp.attuale, ios::binary);
    
    file.write((char *) temp, sizeof(struct));
    Così è giusto?

  7. #7
    Originariamente inviato da Scara95
    Tecnicamente << e >> sono per i file di testo, infatti attuano varie conversioni su caratteri quali \n a seconda del sistema in cui ti trovi...
    Ovviamente non è così, gli operatori >> e << sono sovraccaricati opportunamente come trovi anche su c++ reference
    ...

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da Sart
    Così è giusto?
    Sì ma

    sizeof(struct comesichiama)

    ma devi fare attenzione a cosa c'è nella struttura. Per i puntatori non va bene ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80
    In effetti ci sono 4 variabili puntatori... per cui per salvarle come posso fare?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non puoi e non devi. Quando le rileggerai sicuramente non avranno senso.

    Devi salvare i dati puntati, non i puntatori.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.