2017-11-13 7 views
-1

私は、フォルダのパスを取得し、その中にディレクトリの名前を表示するプログラムを作成しようとしています。 これは私のコードです:ディレクトリのフォルダを検索する

if ((dir = opendir (file_path)) != NULL) 
{ 
    while ((ent = readdir (dir)) != NULL) 
    { 
     if (stat(ent->d_name, &dir_stat)== 0) 
     { 
     if(dir_stat.st_mode & S_IFDIR) 
     { 
      if(strncmp(ent->d_name, "." ,sizeof(ent->d_name)) != 0 
        && strncmp(ent->d_name, "..",sizeof(ent->d_name)) != 0) 
       cout<<"dir : "<< ent->d_name<<endl; 
     } 

     } 
    } 
} 

今の問題は、私はそれを与えるとき、ということです「」 file_pathとして正しく動作しますが、私がそれを与えると、./folderをfile_pathとして渡しても何も印刷されません。どのようにそれを修正するための任意のアイデア?前もって感謝します。

+2

何デバッグステップはあなたが取った?サブディレクトリに再帰する必要がありますか? –

+2

質問の形式を正しく指定してください。 Cで '>'で始まる行はありますか? –

+0

@DaveNewtonええ、今私はちょうどこれを修正し、サブディレクトリの検索をしたいと思います。 – Winston

答えて

1

readdir()は、取得するパスではなく、サブディレクトリの名前を返します。

たとえば、./folder/subがある場合、./folderを読むと、名前としてはsubとなります。その後、stat("sub")をやっては動作しません、あなたが読んでいるディレクトリを連結する必要があります。

while ((ent = readdir (dir)) != NULL) 
{ 
    std::string path = dir; 
    path += ent->d_name; 
    if (stat(path.c_str(), &dir_stat)== 0) 
    { 

あなたのシステムを呼び出した後、いくつかのperror()呼び出しを追加するために通常は良いアイデアです:

if (stat(path.c_str(), &dir_stat) < 0) 
     perror(path.c_str()); 
    else 
    { 
     ... 
関連する問題