Pagina de start a forumului T-CsZoNe
Pagina de start a forumului T-CsZoNe FAQ Cautare Membri Grupuri Profil Mesaje private
 
Acum este: 25/10/2026 18:19  
Citirea dintr-un fisier cu ajutorul functiei fread

 
Creaza un subiect nou   Raspunde la subiect    Pagina de start a forumului T-CsZoNe -> Tutoriale Subiectul anterior | Subiectul urmator  
Autor Mesaj
BlAdErDeTm
Owner
Owner


Data inscrierii: 04/Mar/2009
Mesaje: 15
Localitate: Timisoara

MesajTrimis: 06/03/2009 14:25    Titlul subiectului: Citirea dintr-un fisier cu susÈ›inerea functiei fread Raspunde cu citat (quote)

Totul este legat de programare,daca staff-ul considera ca nu este potrivit forumului rog sa fie sters Smile

Cod:
// lucrul cu fisierele: citirea dintr-un fisier cu ajutorul functiei fread()
// urmarirea indicatorilor de pozitie inainte si dupa scriere. - text si binar


#include<stdio.h>
#include<conio.h>   // pentru functia getch()
#include<stdlib.h>   // pentru functia exit()
#include<string.h>   // pentru functia strlen()

typedef  unsigned long int ULI ;
void finalSir(const char*, ULI*, const ULI) ;

int main(void){
char *sirEroare = "Eroare la operatie asupra fisier" ;
void *sirCititT[32], *sirCititB[32] ;   // cele doua zone tampon (buffer) in care
                                 // se salveaza textul citit din fisiere (text respectiv binar).

const int nrObiecte = 8 ;   // voi citi 8 obiecte ...
const int dimObiect = 3 ;   // ... de extindere 2 octeti, fiecare.

FILE *pFisT, *pFisB ;      // pointerii la fisier;
                           // numele fluxurilor: text si binar

// deschiderea fluxurilor, impreuna cu testele de eroare aferente
pFisT = fopen("c:\\test1.txt", "rt") ;   
      // citire si actualizare, in mod text.
       //  Un caracter Enter la intrare se traduce in perechea CR-LF la scriere in
      // fisier.
pFisB = fopen("c:\\test2.txt", "rb") ;
    // citire si actualizare, in mod binar.

if (pFisT == NULL){   // eroare la deschidere fisier?
   if(ferror(pFisT)) {
        perror(sirEroare) ;
        exit(1) ;   // iesire neconditionata din program
         }
}

if (pFisB == NULL){   // eroare la deschidere fisier?
   if(ferror(pFisB)) {
        perror(sirEroare) ;
        exit(1) ;   // iesire neconditionata din program
         }
}

// operatia efectiva asupra fisierelor
else {      // nu este eroare => incep citirea din fisiere.
  fpos_t pozT, pozB ;   // indicatorii de pozitie ai celor doua tipuri de fisiere.

// test eroare indicator fisier text: inainte de scriere
if(!fgetpos(pFisT, &pozT) )
   printf("\n Indicatorul de pozitie al fisierului text (inainte): %u", pozT) ;
  else  {
   if(ferror(pFisT)) {
        perror(sirEroare) ;
        exit(1) ;   // iesire neconditionata din program
         }
  }

// test eroare indicator fisier binar: inainte de scriere
  if(!fgetpos(pFisB, &pozB) )
     printf("\n Indicatorul de pozitie al fisierului binar (inainte): %u", pozB) ;
  else {
   if(ferror(pFisB)) {
        perror(sirEroare) ;
        exit(1) ;   // iesire neconditionata din program
         }
  }


// citirea efectiva, impreuna cu testele de eroare aferente legate de functia
// folosita.
{
  ULI cititeT, cititeB ;   // numarul caaracterelor citite in mod text, respectiv binar
  char *pVar ;
  int contor ;

  printf("\n\n Se citeste din fisiere...\n") ;

  if((cititeT = fread((char*)sirCititT, dimObiect, nrObiecte, pFisT)) == nrObiecte)
     {
     printf("\n Succes! Numarul efectiv de caractere citite (text): %u",
                                cititeT*dimObiect) ;

/*    contor = cititeT*dimObiect ;
    pVar = (char*)sirCititT ;
    while(contor--) pVar++ ;
    *pVar = '\0' ;   // marchez explicit sfarsitul sirului
*/
    finalSir((const char*)sirCititT, &cititeT, dimObiect) ;
    printf("\n Ceea ce s-a citit (text): %s", (char*)sirCititT) ;
    }
 
  else  {
   if(ferror(pFisT)) {
      perror(sirEroare) ;
      exit(1) ;   // iesire neconditionata din program
         }
  }

// aceleasi operatii pentru fisierul binar
  if((cititeB = fread((char*)sirCititB, dimObiect, nrObiecte, pFisB)) == nrObiecte)
    {
    printf("\n\n Succes! Numarul efectiv de caractere citite (binar): %u",
                                cititeB*dimObiect) ;
/*
    contor = cititeB*dimObiect ;
    pVar = (char*)sirCititB ;
    while(contor--) pVar++ ;
    *pVar = '\0' ;   // marchez explicit sfarsitul sirului
*/
    finalSir((const char*)sirCititB, &cititeB, dimObiect) ;
    printf("\n Ceea ce s-a citit (binar): %s", (char*)sirCititB) ;
    }   

  else  {
   if(ferror(pFisB)) {
      perror(sirEroare) ;
      exit(1) ;   // iesire neconditionata din program
         }
  }

// test eroare indicator fisier text: dupa scriere
  if(!fgetpos(pFisT, &pozT))
     printf("\n\n Indicatorul de pozitie al fisierului text (dupa): %u", pozT) ;
  else {
   if(ferror(pFisT)) {
        perror(sirEroare) ;
        exit(1) ;   // iesire neconditionata din program
         }
  }

// test eroare indicator fisier binar: dupa scriere
  if(!fgetpos(pFisB, &pozB))
     printf("\n Indicatorul de pozitie al fisierului binar (dupa): %u", pozB) ;
  else {
   if(ferror(pFisB)) {
        perror(sirEroare) ;
        exit(1) ;   // iesire neconditionata din program
         }
  }
} // end_else

}   // end_citireEfectiva

// inchiderea fluxurilor
fclose(pFisT) ;
fclose(pFisB) ;

// sfarsit
printf("\n\n Dati un caracter alfa-numeric... ");
getch() ;
}

// implementarea functiei declarate local (functie proprie programatorului).
void finalSir(   const char *sirCitit, /* text sau binar, nu conteaza din cauza apelului referinta*/
            ULI *citite,
             const ULI dimObiect) {
char *pVar ;   // pointer variabil, pentru deplasarea in interiorul sirului preluat
               // ca argument.
int contor ;   // variabila locala

//
contor = *citite*dimObiect ;
pVar = (char*) sirCitit ;

while(contor--) pVar++ ;
*pVar = '\0' ;   // marchez explicit sfarsitul sirului
}
Sus
Vezi profilul utilizatorului Trimite mesaj privat
Afiseaza mesajele pentru a le previzualiza:   
Creaza un subiect nou   Raspunde la subiect    Pagina de start a forumului T-CsZoNe -> Tutoriale Ora este GMT + 2 ore
Pagina 1 din 1

 
Mergi direct la:  
Nu puteti crea un subiect nou in acest forum
Nu puteti raspunde in subiectele acestui forum
Nu puteti modifica mesajele proprii din acest forum
Nu puteti sterge mesajele proprii din acest forum
Nu puteti vota in chestionarele din acest forum


Powered by phpBB © 2001, 2002 phpBB Group
Fa-ti si tu propriul forum GRATUIT, pe www.myforum.ro