Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Elaborazione file. fstream e write?
Forum - C/C++ - Elaborazione file. fstream e write?

Avatar
LucaLuca (Normal User)
Newbie


Messaggi: 15
Iscritto: 25/06/2011

Segnala al moderatore
Postato alle 19:37
Venerdì, 08/07/2011
Salve a tutti.
Ho un dubbio su queste funzioni! Nel manuale che sto leggendo non sono spiegate molto bene quindi mi appello alla vostra sapienza per fare un pò di luce...

Capito il fatto che utilizzando write io ottengo la scrittura di informazioni non formattate su un file, non riesco a capire come possa funzionare la funzione reinterpret_cast<const char*> (riferimentoauntipononpredefinito)...

Ho creato una classe ClientData che è alla base di un record contenente nome, cognome, numero di conto e saldo del conto di un cliente.

Cosa mi scrive nel file se io utilizzo la seguente funzione (creo un oggetto ClientData utente):

nomeFile.write (reinterpret_cast<const char*>(&utente),sizeof(ClientData))

All'interno del file vengono copiati i dati membro private nome cognome ecc...?

Grazieee :k:


Naturalmente se volete avere maggiori informazioni o volete che posti la classe (anche se in realtà si tratta solo di una serie di funzioni set e get legate ai dati membro private) basta chiedere :)

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5473
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:56
Venerdì, 08/07/2011
Se posti il codice, discutiamo maggiormente in dettaglio. Tieni presente che i dati di una classe sono comunque presenti in memoria come una sequenza di byte (quindi di char).


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
LucaLuca (Normal User)
Newbie


Messaggi: 15
Iscritto: 25/06/2011

Segnala al moderatore
Postato alle 16:26
Martedì, 12/07/2011
Scusa per il ritardo ma non ho potuto rispondere prima di oggi...

Definizione classe ClientData

Codice sorgente - presumibilmente C#

  1. class ClientData
  2. {
  3. public:
  4. ClientData(int=0,string="", string ="",double=0.0);
  5.  
  6. void setNumeroAccount(int);
  7. int getNumeroAccount()const;
  8.  
  9. /*Funzioni dello stesso tipo che si limitano all'assegnazione ai dati membro private dei parametri passati alle funzioni set e a restituire semplicemente ogni dato membro con le funzioni get.*/
  10.  
  11. private:
  12. int numeroConto;
  13. char cognome[15];
  14. char nome[10];
  15. double bilancio;
  16. };



Main:
Codice sorgente - presumibilmente C++

  1. #include "ClassData.h"
  2.  
  3. int main()
  4. {
  5. int conto;
  6. char cognome[15];
  7. char nome[10];
  8. double bilancio;
  9.  
  10.  
  11. fstream File("credito.dat",ios::in|ios::out|ios::binary);
  12.  
  13. if (!File)
  14. {
  15. cerr << "Errore apertura file!";
  16. exit(1);
  17. }
  18.  
  19. ClientData utente;
  20.  
  21. cout << "Inserisci numero conto";
  22. cin >> numeroConto;
  23.  
  24.  
  25. while (numeroconto>0 && numeroconto<=100)
  26. {
  27. cout << "Nome, cognome e bilancio";
  28. cin >> setw(15) >> cognome;
  29. cin >> setw(10) >> nome;
  30. cin >> bilancio;
  31.  
  32. File.set***(parametro);
  33. //Richiama tutte le funzioni set per impostare i dati private
  34.  
  35. //Posiziona l'output nel punto corretto
  36. File.seekp((utente.getNumeroConto()-1)*sizeof(ClientData));
  37.  
  38. //Scrive l'informazione inserita
  39. File.write(reinterpret_cast<const char*>(&utente),sizeof(ClientData));
  40.  
  41. cout << "Numero conto";
  42. cin >> numeroconto;
  43. }
  44. }


Ultima modifica effettuata da LucaLuca il 12/07/2011 alle 16:26
PM Quote