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 函数即可打印该目录中的文件。(如果您想保存名称,您可以将名称 strcpy 到 newDir 中。)
此外,for 循环最多只能达到 10 个,而 newDir 只适用于 20 个条目。我认为这些仅用于测试。

于 2013-04-02T10:26:04.287 回答