LCS PREMIUM NOT a MERCEDES Postat Decembrie 17, 2024 LCS PREMIUM Postat Decembrie 17, 2024 ** Obiectiv ** Prin acest tutorial , dorim , pe baza proiectul actual , sa printam rezultatele atat intr-un fisier text (inteles de utilizator) cat si binar (inteles de catre calculator) . ** Implementare ** 1. In Contextul "fileHandling" , definim doua CONSTANTE (Pentru Scriere in Binar si in Fisier Text) si doua functii pentru validarea unui fisier dar si pentru eliberarea colectiilor de fisiere (+ inchiderea fiecarui fisier care face parte) // fileHandling.h #include "stdlib.h" // pentru malloc/free #define WRITEMODE_TXT "w" // CONSTANTA SCRIERE IN FISIERE TEXT (IN)EXISTENTE IN DIRECTOR #define WRITEMODE_BINARY "wb" // CONSTANTA SCRIERE IN FISIERE BINARE (IN)EXISTENTE IN DIRECTOR int checkFile(FILE* file); // validam fisierul void closeFiles(FILE*** files, const unsigned nrFiles); // Preluam prin adresa colectia de fisiere + numarul acestora // ++ RESTU DE FISIER Implementarea Acestora : // fileHandling.c // Restu de fisier int checkFile(FILE* file) { return file ? 1 : 0; // VERIFICAM DACA FISIERUL EXISTA IN MEMORIE } void closeFiles(FILE*** files,const unsigned nrFiles) // Eliberam colectia de fisiere { for (int i = 0; i < nrFiles; i++) fclose((*files)[i]); // Eliberam fiecare fisier // Eliberam colectia de fisiere free(*files); *files = NULL; } 2. In Contextul "roles" , declaram numele fisierelor pe care dorim sa le operam (scriere) dar si functiile de afisare in fisiere a rolurilor : // roles.h // ++ restu de fisier #include "fileHandling.h" #define FILENAME_OUTPUT_ROLES "dateIesireRoluriLeagueCS.txt" #define FILENAME_OUTPUT_ROLES_BINARY "dateIesireRoluriLeagueCS.bin" // Functiile pentru afisare void showRolesOnFile(Role* roles, FILE* rolesOuputText); void writeRolesOnBinaryData(Role* roles, FILE* rolesOutputBinary); Si Implementarile acestora : //roles.c // ++ Restu de fisier void showRolesOnFile(Role* roles, FILE* rolesOuputText) { // fprintf_s --> este functia care ne permite sa scriem in fisiere if (!checkFile(rolesOuputText) || roles == NULL) // Avem un fisier invalid return; // NU CONTINUAM //Daca e ok unsigned i = 0; fprintf_s(rolesOuputText," Colectia de Roluri : { \n"); do { // Parcurgem colectia de roluri fprintf_s(rolesOuputText,"ID ROL : %d \t NUME ROL : %s\n", roles[i].id, roles[i].nameRole); i++; } while (!roles[i - 1].isLastRole); fprintf_s(rolesOuputText," } \n\n"); } void writeRolesOnBinaryData(Role* roles, FILE* rolesOutputBinary) { if (!checkFile(rolesOutputBinary) || roles == NULL) // FACEM O VALIDARE ATAT FISIERULUI CAT SI STRUCTURII return; // NU CONTINUAM // Daca e ok , transcriem structura in fisier : // fwrite() --> este functia pentru scrierea entitatilor in binar // unsigned i = 0; do { // Parcurgem colectia de roluri fwrite(&roles[i].id,sizeof(int),1,rolesOutputBinary); // Trecem in binar id-ul fwrite(roles[i].nameRole,sizeof(char),strlen(roles[i].nameRole), rolesOutputBinary); // Trecem numele rolului in binar i++; } while (!roles[i - 1].isLastRole); } ** Rezultate ** In functia principala , vom initializa colectia cu fisierele asociate , vom afisa rolurile atat in consola cat si in fisierele binare/text . La final , le vom elibera din memorie /* Legam toate entry point toate headerele dependente */ #include "../StructuriDate/roles.h" #include "../StructuriDate/fileHandling.h" // stringHandling.h nu este dependent de entry point // // CONSTANTELE MACRO SUNT UTILE CA LE PUTEM UTILIZA LA NIVEL GLOBAL (PE TOT FISIERUL) // NOTA** : E O PRACTICA BUNA DE A FOLOSI MACRO SPRE DEOSEBIRE DE CONSTANTE "MAGICE" (NUMERE PRIN COD) #define NR_FILES 3 // STABILIM UN NUMAR DE FISIERE int main() { FILE** file = NULL; file = (FILE**)malloc(sizeof(FILE*)*NR_FILES); // DECLARAM O COLECTIE DE FISIERE file[0] = openFile(FILENAME_INPUT_ROLES, READMODE_TXT); // CITIM ROLURILE DINTR-UN FISIER TEXT file[1] = openFile(FILENAME_OUTPUT_ROLES, WRITEMODE_TXT); // SCRIEM ROLURI INTR-UN FISIER TEXT file[2] = openFile(FILENAME_OUTPUT_ROLES_BINARY, WRITEMODE_BINARY); // SCRIEM ROLURI INTR-UN FISIER TEXT // dateIntrareLeagueCS.txt && dateIntrareRoluriLeagueCS.txt TREBUIE SA EXISTE IN DIRECTOR (ALTFEL VA ESUA) Role* roles = fetchRoles(file[0]); // Am primit lista cu rolurile showRoles(roles); // Afisam Rolurile showRolesOnFile(roles, file[1]); // Le afisam intr-un fisier text writeRolesOnBinaryData(roles,file[2]); // Le afisam intr-un fisier binar // ELIBERAM RESURSELE freeRoles(&roles); // Eliberam resursele ocupate de entitate closeFiles(&file,NR_FILES); // Eliberam resursele ocupate de fisiere if (file == NULL) printf("COLECTIA DE FISIERE A FOST ELIBERATA CU SUCCES !! "); return 0; } Rezultatul in consola : **FISIERUL dateIntrareRoluriLeagueCS.txt S-A DESCHIS CU SUCCES !** // Astea doua SUNT GENERATE DE PROGRAM !! **FISIERUL dateIesireRoluriLeagueCS.txt S-A DESCHIS CU SUCCES !** **FISIERUL dateIesireRoluriLeagueCS.bin S-A DESCHIS CU SUCCES !** Colectia de Roluri : { ID ROL : 0 NUME ROL : Membru ID ROL : 1 NUME ROL : Utilizator Premium ID ROL : 2 NUME ROL : Moderator ID ROL : 3 NUME ROL : Super Moderator ID ROL : 4 NUME ROL : Administrator } COLECTIA DE FISIERE A FOST ELIBERATA CU SUCCES !! NOTA 1 ** : In atasament , veti putea vizualiza rezultatele atat in fisier binar cat si text !! NOTA 2 ** : Fisierele careia li se aplica operatiunea de scriere , sunt GENERATE DE PROGRAM DACA NU EXISTA IN DIRECTOR !! NOTA 3 ** : ACESTE CODURI SUNT DOAR ADAUGIRI(ADAPTARI) DE LA CODUL REGASIT IN TUTORIALUL ANTERIOR DE STRUCTURI !! dateIesireRoluriLeagueCS.bin dateIesireRoluriLeagueCS.txt
Postări Recomandate