BlAdErDeTm Owner

Data inscrierii: 04/Mar/2009 Mesaje: 15 Localitate: Timisoara
|
Trimis: 06/03/2009 14:25 Titlul subiectului: Citirea dintr-un fisier cu susținerea functiei fread |
|
|
Totul este legat de programare,daca staff-ul considera ca nu este potrivit forumului rog sa fie sters
| 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
} |
|
|