/* AUTORE: Manuel Vichi 3^AIN Esercizio 2 File Binari */ #include #include #include #include using namespace std; void initializeArray(int array[], size_t size) { //size_t size = sizeof(array) / sizeof(array[0]); for (size_t i = 0; i < size; i++) { array[i] = 0; } } int readBinary(char * const fileName, int buffer[], size_t count) { FILE* file = fopen(fileName, "rb"); if (file == NULL) { perror("Errore nell'apertura del file di lettura"); return -1; } else { fseek(file,0,SEEK_SET); int read = fread(buffer,sizeof(int),count,file); fclose(file); return read; } return -1; } int readSpecific(char * const fileName, int &buffer, unsigned index) { FILE* file = fopen(fileName, "rb"); if (file == NULL) { perror("Errore nell'apertura del file di lettura"); return -1; } else { unsigned n = (index-1); fseek(file,n * sizeof(int),SEEK_SET); int read = fread(&buffer,sizeof(int),1,file); fclose(file); return read; } return -1; } int readBeforeLast(char * const fileName, int &buffer) { FILE* file = fopen(fileName, "rb"); if (file == NULL) { perror("Errore nell'apertura del file di lettura"); return -1; } else { fseek(file,-sizeof(int),SEEK_END); int read = fread(&buffer,sizeof(int),1,file); fclose(file); return read; } return -1; } int readRandom(char * const fileName, int &buffer, unsigned count_max) { FILE* file = fopen(fileName, "rb"); if (file == NULL) { perror("Errore nell'apertura del file di lettura"); return -1; } else { srand(time(NULL)); unsigned n = rand() % (count_max + 1); fseek(file,n * sizeof(int),SEEK_SET); int read = fread(&buffer,sizeof(int),1,file); fclose(file); return read; } return -1; } int main(void) { char file[] = "file_200.bin"; //char file[] = "file.txt"; int arr[200]; int num = 0,numlast = 0,random = 0; size_t count = sizeof(arr) / sizeof(arr[0]); initializeArray(arr,count); printf("Valori letti dal file %s: %d\n",file,readBinary(file,arr,count)); printf("Valori letti dal file %s: %d\n",file,readSpecific(file,num,2)); printf("Valori letti dal file %s: %d\n",file,readBeforeLast(file,numlast)); printf("Valori letti dal file %s: %d\n",file,readRandom(file,random,count)); printf("Lettura completa: "); for (size_t i = 0; i < count; i++) { printf("%d ", arr[i]); } printf("\n"); printf("Risultato lettura specifica: %d\n",num); printf("Risultato lettura penultimo elemento: %d\n",numlast); printf("Risultato lettura casuale: %d\n",random); return 0; }