2012-04-08 12 views
0

Ich habe versucht, alle Dateien und Ordner Liste rekursiv zu bekommen.Aber ich kann nur Unterverzeichnisse von Dokumenten und innerhalb von ihnen. Ich kann nicht die anderen Ordner, die innerhalb des Unterverzeichnisses. Ich weiß nicht, wie es zu tun recursively.I zu hoffen, dass Sie mir helfenC Verzeichnis und Unterverzeichnis Rekursion

  #include <stdio.h> 
    #include <sys/types.h> 
    #include <dirent.h> 
    #include <windows.h> 
    #include <unistd.h> 
    #include <string.h> 
    void list(char *a); 
    void reader(char *path); 
    int 
    main (void) 
    { 
     DIR *dp; 
     struct dirent *ep; 

     dp = opendir ("C:\\Users\\pen\\Documents\\"); 
     if (dp != NULL) 
     { 
      while (ep = readdir (dp)){ 

GetFileAttributes(ep->d_name); 
if(FILE_ATTRIBUTE_DIRECTORY & GetFileAttributes(ep->d_name)) 
{ 

     if (strcmp(".",ep->d_name)==0) 
      continue; 

    if (strcmp("..",ep->d_name)==0) 
    continue; 



    reader(ep->d_name); 

} 

      } 
      closedir(dp); 

     } 
     else 
     perror ("Couldn't open the directory"); 
     closedir(dp); 
    system("pause"); 
     return 0; 
    } 
    void reader(char *path){ 
      DIR *da; 
      struct dirent *ef; 
       da = opendir(path); 
      while (ef=readdir(da)){ 
      printf ("%s\n",ef->d_name); 
     if(FILE_ATTRIBUTE_DIRECTORY & GetFileAttributes(ef->d_name)) 
     { 

if (strcmp(".",ef->d_name)==0) 
continue; 


    if (strcmp("..",ef->d_name)==0) 
continue; 
    reader(ef->d_name); 

} 
    } 
     closedir(da); 
} 
+1

Verzeichnisse sind kein Konzept der C-Sprache, sondern des Betriebssystems. Bitte kennzeichnen Sie Ihre Frage so, dass wir wissen, um welches System es sich bei Ihrer Frage handelt. Wenn Sie sich den richtigen Doppelpunkt auf dieser Seite ansehen, sehen Sie, dass viele Fragen bereits in dieser Zeile gestellt wurden. Hast du sie vor dem Posten gelesen? –

Antwort

1

1) In reader Sie müssen closedir(da); nach der while-Schleife nennen.

2) jeder Anruf zu reader muss den absoluten Pfad Sie path

-ef->d_name und dann rufen Leser verketten müssen haben.

3) um Debugging zu aktivieren, sollten Sie perror nach einem fehlgeschlagenen readdir aufrufen.

+0

Danke, aber es ist immer noch gleich Ich ändere den Code in der Frage vielleicht habe ich etwas falsch gemacht –

+0

@AnonSr bearbeitete Antwort – keety

+0

danke das Problem ist gelöst –

Verwandte Themen