/* AUTORE: Manuel Vichi 3^AIN Esercizio 3 File Binari */ #include #include #include using namespace std; typedef struct { char nome[20]; char cognome[20]; float reddito; } Persona; Persona leggiPersona(const char * fileName) { Persona persona; FILE* file = fopen(fileName, "rb"); if (file != NULL) { Persona persona; fread(&persona, sizeof(persona), 1, file); fclose(file); } else { perror("Errore durante l'apertura del file di lettura"); return persona; } return persona; } int leggiPersone(const char * fileName, Persona persone[], const size_t count) { FILE * file = fopen(fileName, "rb"); if (file != NULL) { int read = fread(persone, sizeof(Persona), count, file); return read; } else { perror("Errore durante l'apertura del file di lettura"); return -1; } return -1; } int scriviPersona(const char * fileName, const Persona persona) { FILE * file = fopen(fileName, "wb"); if (file != NULL) { int written = fwrite(&persona, sizeof(persona), 1, file); fclose(file); return written; } else { perror("Errore durante l'apertura del file di scrittura"); return -1; } } Persona memorizzaPersona(const char nome[], const char cognome[], const float reddito) { Persona persona; strcpy(persona.nome, nome); strcpy(persona.cognome, cognome); persona.reddito = reddito; return persona; } int convertiText(const char * binaryName, const char * textName, const size_t count) { FILE* read = fopen(binaryName, "rb"); FILE* write = fopen(textName, "wt"); if (read == NULL || write == NULL) { perror("Errore durante l'apertura di uno dei file"); return -1; } else { Persona buffer[count]; int written = 0; fread(buffer,sizeof(Persona),count,read); for (size_t i = 0; i < count; i++) { written += fprintf(write,"%s %s %f", buffer[i].nome, buffer[i].cognome, buffer[i].reddito); } return written; } return -1; } int main(void) { Persona persona; char file[] = "persona.bin"; char file2[] = "persona2.bin"; printf("Dimensione del tipo Persona: %d\n", sizeof(persona)); persona = memorizzaPersona("Mario", "Rossi", 1350.50); printf("Valori scritti su file binario %s: %d\n", file, scriviPersona("persona.bin", persona)); persona = leggiPersona(file); printf("Valori letti dal file binario %s: %s, %s, %f\n", file, persona.nome, persona.cognome, persona.reddito); Persona persone[5]; printf("Numero di valori letti dal file binario %s: %d\n", file2, leggiPersone(file2, persone, 5)); return 0; }