Jump to content

Operatii Cu Directoare In C


skyler_sdf

Recommended Posts

Funcţiile de parcurgere a cataloagelor de fişiere descrise mai jos (opendir, readdir, closedir) sunt definite de mai multe medii de programare C (printre care şi GNU C pentru sistemul de operare Linux), precum şi de standardul POSIX. Aceste funcţii sunt declarate în

<dirent.h>.
Funcţiile de redenumire şi ştergere a unor fişiere sunt descrise în
<stdio.h>.
Nume
opendir - deschide un director
Declaraţie
DIR *opendir(const char *nume);
Descriere Funcţia opendir deschide un flux pentru directorul cu numele nume, şi returnează un pointer la fluxul deschis. Fluxul este poziţionat pe prima intrare din director. Valoare returnată Funcţia returnează un pointer la flux în caz de succes, sau NULL în caz de eroare şi variabila globală errno indică codul erorii. Câteva erori posibile EACCES Acces interzis ENOTDIR nume nu este un director Nume
readdir - citeşte dintr-un director
Declaraţie
struct dirent *readdir(DIR *dir);
Descriere Funcţia readdir returnează un pointer la o structură de tip dirent care reprezintă următoarea intrare din directorul indicat de fluxul dir. Returnează NULL dacă s-a depistat sfârşitul de director sau dacă a apărut o eroare. Structura de tip dirent conţine un câmp char d_name[]. Utilizarea altor câmpuri din structură reduce portabilitatea programelor. Valoare returnată Funcţia returnează un pointer la o structură de tip dirent, sau NULL dacă s-a depistat sfârşitul de director sau dacă a apărut o eroare. Nume
closedir - închide un director
Declaraţie
int closedir(DIR *dir);
Descriere Funcţia closedir închide fluxul dir. Valoare returnată Funcţia returnează 0 în caz de succes sau EOF în caz de eroare. Nume
rename - redenumeşte un fişier

	remove - şterge un fişier
Declaraţie
int rename(const char *old, const char *new);

	int remove(const char *name);
Descriere Funcţia rename schimbă numele unui fişier din old în new. Dacă a fost precizat un periferic în new, acesta trebuie să coincidă cu cel din old. Directoarele din old şi new pot să fie diferite, astfel că rename poate fi folosită pentru a muta un fişier dintr-un director în altul. Nu se permit specificatori generici (wildcards). Funcţia remove şterge fişierul specificat prin name. Valoare returnată În caz de succes se returnează 0. În caz de eroare se returnează EOF şi variabila globală errno indică codul erorii. Programe demonstrative 1) Determinarea mărimii unui fişier

#include <stdio.h>

FILE *f;

int main(int ac, char **av) {

if (ac!=2) {

   fputs("Un argument!\n",stderr);

   return 1;

   }

f = fopen(av[1],"rb");

if (!f) {

   perror("Eroare la deschidere");

   return 1;

   }

fseek(f,0,SEEK_END);

fprintf(stderr,"File %s, size %ld\n",ftell(f)); fclose(f);

return 0;

}

2) Copierea unui fişier a). Funcţiile fgets şi fputs se folosesc pentru fluxuri deschise în mod text. Cum se utilizează pentru copierea unui fişier text?

#include <stdio.h>

#define LSIR 80

char lin[LSIR];

FILE *fi, *fo;

int main(int ac, char **av) {

if (ac!=3) {

   fputs("Doua argumente!\n",stderr);

   }

fi=fopen(av[1],"rt"); fo=fopen(av[2],"wt");

if (!fi || !fo) {

   perror("Eroare la deschidere");

   return 1;

   }

while (fgets(lin,LSIR,fi))

   fputs(lin,fo);

fclose(fi); fclose(fo);

return 0;

}
b). Funcţiile fread şi fwrite se folosesc pentru fluxuri deschise în mod binar. Cum se utilizează pentru copierea unui fişier binar?

#include <stdio.h>

#define LZON 4096

char zon[LZON];

FILE *fi, *fo;

unsigned k;

int main(int ac, char **av) {

if (ac!=3) {

   fputs("Doua argumente!\n",stderr);

   return 1;

   }

fi=fopen(av[1],"rb"); fo=fopen(av[2],"wb");

if (!fi || !fo) {

   perror("Eroare la deschidere");

   return 1;

   }

while (k=fread(zon,1,LZON,fi))

   fwrite(zon,1,k,fo); fclose(fi); fclose(fo);

return 0;

}
3) Prelucrarea unui fişier text Programul prezentat în continuare citeşte un fişier text care conţine pe fiecare linie un şir de caractere (fără spaţii) şi trei valori întregi, şi afişează pe terminal numele pe 12 poziţii aliniat la stânga şi media aritmetică a celor trei valori întregi.

#include <stdio.h>

FILE *fi;

char num[10];

int a,b,c;

double m;

int main(int ac, char **av) {

if (ac!=2) {

   fputs("Un argument!\n",stderr);

   return 1;

   }

fi=fopen(av[1],"rt");

if (!fi) {

   perror("Eroare la deschidere");

   return 1;

   }

while (fscanf(fi,"%s %d %d %d",num,&a,&b,&c)!=EOF)

   {

   m=(a+b+c)/3.0;

   printf("%-12s%6.2lf\n",num,m);

   }

fclose(fi);

return 0;

}

4) Afişarea conţinutului unui director

#include <dirent.h>

#include <stdio.h>

DIR *dir;

struct dirent *ent;

int main(int ac, char **av) {

if (ac!=2) {

   printf("Un parametru\n");

   return 1;

   }

dir = opendir(av[1]);

if (!dir) {

   perror("Eroare open dir");

   return 1;

   }

while (ent=readdir(dir))

   printf("%s\n",ent->d_name);

return 0;

}

  • Upvote 2
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.