1

特定のパスに含まれるすべてのファイル、ディレクトリ、およびサブディレクトリを再帰的に取得したいと考えています。しかし、コードが第 2 レベル (ディレクトリ内のディレクトリ) に到達すると問題が発生します。内部ディレクトリを開いてその内容を検索する代わりに、エラーがスローされます。これが私がやったことです:

void getFile(char *path)
{

    DIR *dir;
    struct dirent *ent;
    if ((dir = opendir(path)) != NULL) {
    /* print all the files and directories within directory */
    while ((ent = readdir(dir)) != NULL) {
      if((strcmp(ent->d_name,"..") != 0) && (strcmp(ent->d_name,".") != 0)){

      printf ("%s", ent->d_name);

      if(ent->d_type == DT_DIR){

      printf("/\n");
      getFile(ent->d_name);
      }
      else{

      printf("\n");
      }
      }   // end of if condition
    }     // end of while loop
    closedir (dir);

}
4

2 に答える 2

4

再帰的に呼び出すときgetFileは、読み込んだディレクトリの名前だけで呼び出すだけです。それはあなたが必要とするフルパスではありません。あなたはそれを自分で管理しなければなりません。


このようなもの:

if(ent->d_type == DT_DIR)
{
    if ((strlen(path) + strlen(ent->d_name) + 1) > PATH_MAX)
    {
        printf("Path to long\n");
        return;
    }

    char fullpath[PATH_MAX + 1];

    strcpy(fullpath, path);
    strcat(fullpath, "/");
    strcat(fullpath, ent->d_name); // corrected

    getFile(fullpath);
}
于 2013-04-19T15:01:33.780 に答える