0

現在のディレクトリでディレクトリを検索していますが、ディレクトリにまたがる場合、ディレクトリとファイルにアクセスして再度検索しましたが、問題が見つかりません。常に同じ結果といくつかの特定のディレクトリが得られます。コードでは、ディレクトリ名を配列で取得して出力します。結果は次のようになります。

direc Num (except parent and curr) : 6

/home/sabri/Desktop/Test/Untitled Folder 3

/home/sabri/Desktop/Test/Untitled Folder 3

/home/sabri/Desktop/Test/Untitled Folder 3

/home/sabri/Desktop/Test/Untitled Folder 3

/home/sabri/Desktop/Test

/home/sabri/Desktop/Test/Untitled Folder 4

/home/sabri/Desktop/Test/Untitled Folder 4

/home/sabri/Desktop/Test/Untitled Folder 4

しかし、私のディレクトリは;

Untitled Folder 1

Untitled Folder 2

Untitled Folder 3

Untitled Folder 4

Untitled Folder 5

int listFilesIndir(char *currDir) 
{
    struct dirent *direntp;
    char newDir[20][250];


    DIR *dirp;
    int x ,y =0,i=0 ;


    if ((dirp = opendir(currDir)) == NULL) 
    {
        perror ("Failed to open directory");
        return 1;
    }

    while ((direntp = readdir(dirp)) != NULL)
    {
        printf("%s\n", direntp->d_name);
        if(direntp->d_type == DT_DIR)
        {
            y++;
            chdir(direntp->d_name);
            getcwd(newDir[i],250);
            listNewDir(direntp->d_name);
            i++;

        }
    }

    printf("direc Num (except parent and current) : %d\n",y-2 );

    for ( i = 0; i < 10; ++i)
    {
        printf("%s\n", newDir[i]);
    }

    while ((closedir(dirp) == -1) && (errno == EINTR)) ;

    return 0;
}


int listNewDir(char *currDir) 
{
    struct dirent *direntp;
    DIR *dirp;

    if ((dirp = opendir(currDir)) == NULL) 
    {
        perror ("Failed to open directory");
        return 1;
    }

    while ((direntp = readdir(dirp)) != NULL)
        printf("%s\n", direntp->d_name);

    while ((closedir(dirp) == -1) && (errno == EINTR)) ;

    return 0;
}
4

1 に答える 1

0

「.」をスキップする必要があります。および「..」エントリ。chdir と getcwd も実行しないでください。ディレクトリ名を listNewDir 関数に渡すだけで、そのディレクトリ内のファイルが出力されます。(名前を保存したい場合は、名前を newDir に strcpy できます。)
また、for ループは最大 10 個までしか実行できず、newDir は 20 個のエントリに対してのみ有効です。それらはテスト専用だと思います。

于 2013-04-02T10:26:04.287 に答える