diff --git a/file/es2_binary.cpp b/file/es2_binary.cpp index e2ea065..06e6c81 100644 --- a/file/es2_binary.cpp +++ b/file/es2_binary.cpp @@ -4,14 +4,65 @@ 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 { - int read = fread(&buffer,sizeof(int),count,file); + 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; } @@ -19,13 +70,22 @@ int readBinary(char * const fileName, int buffer[], size_t count) { } int main(void) { char file[] = "file_200.bin"; - int arr[100]; + //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: "); + 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("%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; }