Guest User

Untitled

a guest
Apr 21st, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.89 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<dirent.h>
  4. #include<string.h>
  5. #include<errno.h>
  6.  
  7. //Implementierung einer eigenen Sortierfunktion: sortiert die Einträge
  8. // nach der Länge der Namen absteigend
  9. int SortByLen(struct dirent const  ** left,struct dirent const ** right ){
  10.     int lenleft = strlen((*left)->d_name);
  11.     int lenright = strlen((*right)->d_name);
  12.    
  13.     if(lenleft > lenright){ //absteigend nach länge
  14.         return -1;
  15.     }
  16.     else if (lenleft == lenright){
  17.         return 0;
  18.     }
  19.     else{
  20.          return 1;
  21.     }
  22.    
  23. }
  24.  
  25.  
  26. //Implementierung einer Select Funktion: filtert . und .. heraus
  27. int Select(struct dirent const * dir){
  28.     if(strcmp(dir->d_name,".") == 0 || strcmp(dir->d_name,"..") == 0 ){
  29.         return 0; //Eintrag soll nicht selektiert werden
  30.     }
  31.     return 1;
  32. }
  33.  
  34.  
  35. int main(int argc,char ** argv){
  36.  
  37.     char const * dirName = ".";
  38.     int numofEntries = 0;
  39.     struct dirent** namelist = 0;
  40.     int i =  0;
  41.  
  42.     if(argc > 1){
  43.         dirName = argv[1];
  44.     }
  45.     //lesen des angegebenen Verzeichnisses mit dem zusatz scandir
  46.     // reserviert speicher für die gefundenen einträge
  47.     //kein selector angegeben --> alle einträge werden ausgegeben
  48.     //als Sortierfunktion wird alphasort verwenet
  49.     errno = 0;
  50.     //numofEntries = scandir(dirName,&namelist,0,alphasort);
  51.  
  52.     //Variante mit Selector
  53.     numofEntries = scandir(dirName,&namelist,Select,SortByLen);
  54.  
  55.     if(errno != 0){
  56.         perror("error in scandir");
  57.         return EXIT_SUCCESS;
  58.     }
  59.  
  60.     printf("Anzahl der Einträge in %s: %d\n",dirName,numofEntries);
  61.  
  62.     //Anzahl der Verzeihniseinträge
  63.     if(numofEntries){
  64.         printf("Die Einträge\n");
  65.     }
  66.  
  67.     for(i = 0;i < numofEntries;++i){
  68.         printf("%s\n",namelist[i]->d_name);
  69.         free(namelist[i]);
  70.     }
  71.    free(namelist); namelist = 0;
  72.  
  73.  
  74.    
  75.     return EXIT_SUCCESS;
  76. }
Add Comment
Please, Sign In to add comment