diff --git a/file/es3_binary.cpp b/file/es3_binary.cpp new file mode 100644 index 0000000..5273dcf --- /dev/null +++ b/file/es3_binary.cpp @@ -0,0 +1,85 @@ +/* +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; +}