PDA

Visualizza la versione completa : [C++] Scrittura su file binari


alukard990
09-01-2012, 17:18
Salve ho un problema con la scrittura su file binari.In particolare quando inserisco numeri, su file vengono salvati caratteri speciali mentre per le stringhe è tutto ok.Vi posto il codice della classe "paccopostale" e la funzione membro scrivi che intende scrivere i dati di tale pacco su file binario. Grazie mille in anticipo a tutti per l'aiuto


#ifndef PACCOP_H_
#define PACCOP_H_
#include <iostream>
#include <fstream>

using namespace std;

class paccop{


private:
char *indirizzo;
int codice;
float peso;

public:
paccop(const char* i="",const int c=0,const float p=0.0)
{indirizzo=new char[strlen(i)+1];strcpy(indirizzo,i);codice=c;peso=p;}
paccop(const paccop &);
const paccop & operator=(const paccop &);
const char* get_indirizzo()const {return indirizzo;}
int get_codice()const {return codice;}
float get_peso()const {return peso;}
void set_indirizzo(const char* I) {delete[] indirizzo;indirizzo=new char[strlen(I)+1];strcpy(indirizzo,I);}
void set_codice(const int C) {codice=C;}
void set_peso(const float P) {peso=P;}
void scrivi();
friend istream& operator>>(istream&,paccop &);
friend ostream& operator<<(ostream&,const paccop &);

};

#endif

void paccop::scrivi()
{
char namefile[30];
ofstream file;
cout<<"Inserisci il nome del file binario su cui vuoi scrivere: ";
cin.getline(namefile,29);
file.open(namefile,ios::binary|ios::out);
char ind[30];
int c,n;
float p;
cout<<"Inserisci indirizzo,codice e peso del pacco\n";
while(cin>>ind>>c>>p)
{
n=strlen(ind);
file.write((const char*)(&n),sizeof(n));//voglio salvare su file anche la lunghezza della stringa indirizzo
file.write((const char*)(&ind),n);
file.write((const char*)(&c),sizeof(int));
file.write((const char*)(&p),sizeof(float));
}
file.close();
}

oregon
09-01-2012, 20:23
Originariamente inviato da alukard990
Salve ho un problema con la scrittura su file binari.In particolare quando inserisco numeri, su file vengono salvati caratteri speciali mentre per le stringhe è tutto ok.

Beh, non è un problema. E' normale se memorizzi i dati numerici in binario non poterli "leggere" con un qualsiasi editor ASCII ...

alukard990
09-01-2012, 22:48
Quindi se io voglio visualizzare ad esempio la lunghezza della stringa( facciamo che è lunga 20)come mi consigli di operare?

oregon
09-01-2012, 23:02
Non ho capito la domanda e non ho capito l'attinenza con quello che abbiamo già detto ...

alukard990
09-01-2012, 23:16
Mi spiego meglio: se in input inserisco 20 non c'è il modo di visualizzare 20 e non caratteri speciali?

oregon
09-01-2012, 23:18
Dovresti salvare il valore come stringa, ma perché mai? Non capisco ancora ...

alukard990
09-01-2012, 23:27
Lo avevo intuito di salvarlo come stringa però in uno dei tanti homework da consegnare al prof per poter effettuare l'esame di programmazione 1 mi diceva proprio di usare un int per il codice e un float per il peso...comunque grazie ancora per le risposte

oregon
09-01-2012, 23:48
E va bene l'int e il float ... non vedo la necessità di convertirlo in stringa.

alukard990
09-01-2012, 23:59
vabè ho capito tutta la faccenda :) se opero con dati numerici posso ottenere caratteri speciali in output se si opera con un editor qualsiasi...(infatti aprivo i .dat con il blocco note)...grazie ancora per la disponibilità.

Loading