2017-01-05 6 views
0

私のプログラムは、1つのフォルダの深さまでしか循環しません。私がそれを実行すると、プログラムはフォルダ1のフォルダの名前を出力し、それを入力してそのファイルをリストアップするのではなく、その名前を出力します。Cプログラムファイル/フォルダ検索の繰り返し数

void getFilesInDirectory(char *loc){ 
struct dirent *dirp; 
DIR *rec; 
struct stat f_info; 
char full[PATH_MAX + 1]; 

rec = opendir(loc); 
while ((dirp = readdir(rec)) != NULL) 
{ 
    if(strcmp(dirp->d_name,".") != 0 && strcmp(dirp->d_name,"..") != 0){ 
     stat(dirp->d_name, &f_info); 
     _fullpath(full, dirp->d_name, PATH_MAX); 

     if(S_ISDIR(f_info.st_mode)){ 
      getFilesInDirectory(full); 
     }else{ 
      printf("%s\n", dirp->d_name); 
     } 
    } 
} 
close(rec); 
} 

出力:

フォルダ1、フォルダ2 Insideは、それぞれfile3.txtとfile4.txtですが、プログラムは、それらを表示されません。だから私の出力は

file1.txt 
file2.txt 
file3.txt 
file4.txt 

する必要があります再帰が1つのフォルダ深い

+0

LOCそれを渡していないので、私はまた、あなたの_fullpath機能は仕事ができる方法を見ることができないよろしいですか?私は問題を見ません。デバッガを試してください。 –

+0

_fullpathはおそらく現在のディレクトリレベルで動作します。 /で区切られたファイル名にディレクトリ名を連結してみてください。 – cup

答えて

1

問題を停止する理由はありますが、間違ったファイル名でのstat()を呼び出しているです。あなたは完全なファイル名を渡す必要があります - あなたは "loc"ディレクトリのファイルを見ているということは考えていません。

sprintf(full,"%s/%s",loc,dirp->d_name); 
stat(full, &f_info); 

あなたは

+0

statコールが動作します。私はあなたの提案を試み、それは同じ結果を与えた。 dirp-> d_nameは相対パスです –

+0

これはそれでした。私はそれを使いこなしました。あなたの新しい完全なファイル名を含むように私の再帰を変更するのを忘れました。ありがとう、これはそれだった。 _fullpathは動作します.dirp-> d_nameはCWDからの相対パスです –

関連する問題