Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #include<dirent.h>
- #include<string.h>
- #include<errno.h>
- //Implementierung einer eigenen Sortierfunktion: sortiert die Einträge
- // nach der Länge der Namen absteigend
- int SortByLen(struct dirent const ** left,struct dirent const ** right ){
- int lenleft = strlen((*left)->d_name);
- int lenright = strlen((*right)->d_name);
- if(lenleft > lenright){ //absteigend nach länge
- return -1;
- }
- else if (lenleft == lenright){
- return 0;
- }
- else{
- return 1;
- }
- }
- //Implementierung einer Select Funktion: filtert . und .. heraus
- int Select(struct dirent const * dir){
- if(strcmp(dir->d_name,".") == 0 || strcmp(dir->d_name,"..") == 0 ){
- return 0; //Eintrag soll nicht selektiert werden
- }
- return 1;
- }
- int main(int argc,char ** argv){
- char const * dirName = ".";
- int numofEntries = 0;
- struct dirent** namelist = 0;
- int i = 0;
- if(argc > 1){
- dirName = argv[1];
- }
- //lesen des angegebenen Verzeichnisses mit dem zusatz scandir
- // reserviert speicher für die gefundenen einträge
- //kein selector angegeben --> alle einträge werden ausgegeben
- //als Sortierfunktion wird alphasort verwenet
- errno = 0;
- //numofEntries = scandir(dirName,&namelist,0,alphasort);
- //Variante mit Selector
- numofEntries = scandir(dirName,&namelist,Select,SortByLen);
- if(errno != 0){
- perror("error in scandir");
- return EXIT_SUCCESS;
- }
- printf("Anzahl der Einträge in %s: %d\n",dirName,numofEntries);
- //Anzahl der Verzeihniseinträge
- if(numofEntries){
- printf("Die Einträge\n");
- }
- for(i = 0;i < numofEntries;++i){
- printf("%s\n",namelist[i]->d_name);
- free(namelist[i]);
- }
- free(namelist); namelist = 0;
- return EXIT_SUCCESS;
- }
Add Comment
Please, Sign In to add comment