2012-04-08 65 views
0

私は再帰的にすべてのファイルとフォルダlist.Butを取得しようとしましたが、ドキュメントのサブディレクトリとそれらの内部を取得することができます。私はサブディレクトリの内部に他のフォルダを取得できません。 私はあなたがwhileループの後closedir(da);を呼び出す必要がreaderでくれCディレクトリとサブディレクトリ再帰

  #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

ディレクトリはC言語の概念ではなく、オペレーティングシステムの概念です。あなたの質問がどのようなシステムであるかを知るように、あなたの質問に正しくタグを付けてください。また、このページの右のコロンを見ると、すでにその行に多くの質問があることがわかります。投稿する前にそれらを読んだことがありますか? –

答えて

1

1)を助け、それは願っていますrecursively.I行う方法を知りません。

2)readerのすべての呼び出しは、あなたがリーダーを呼び出し、その後ef->d_nameからpath

を連結し、する必要が絶対パスを持っている必要があります。

3)デバッグを有効にする場合は、readdirコールの失敗後にperrorを呼び出す必要があります。

+0

ありがとうございましたが、まだ同じです。質問のコードを変更すると、何かが間違っている可能性があります。 –

+0

@AnonSr編集の回答 – keety

+0

問題を解決していただきありがとうございます –

関連する問題