C 如何打印所有目录以及这些目录下的文件?

C 如何打印所有目录以及这些目录下的文件?,c,embedded,system,systems-programming,C,Embedded,System,Systems Programming,我正在搜索当前目录中的目录,如果我访问了一个目录,我会进入并再次搜索目录和文件,但我找不到问题。我总是得到相同的结果和一些特定的目录。在代码中,我得到数组中的目录名并打印它们 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

我正在搜索当前目录中的目录,如果我访问了一个目录,我会进入并再次搜索目录和文件,但我找不到问题。我总是得到相同的结果和一些特定的目录。在代码中,我得到数组中的目录名并打印它们

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)
{
结构方向*direntp;
char newDir[20][250];;
DIR*dirp;
int x,y=0,i=0;
if((dirp=opendir(currDir))==NULL)
{
perror(“打开目录失败”);
返回1;
}
while((direntp=readdir(dirp))!=NULL)
{
printf(“%s\n”,direntp->d_name);
if(direntp->d_type==DT_DIR)
{
y++;
chdir(direntp->d_名称);
getcwd(newDir[i],250);
listNewDir(direntp->d_名称);
i++;
}
}
printf(“direc Num(父级和当前除外):%d\n”,y-2);
对于(i=0;i<10;++i)
{
printf(“%s\n”,newDir[i]);
}
而((closedir(dirp)=-1)和&(errno==EINTR));
返回0;
}
int listNewDir(char*currDir)
{
结构方向*direntp;
DIR*dirp;
if((dirp=opendir(currDir))==NULL)
{
perror(“打开目录失败”);
返回1;
}
while((direntp=readdir(dirp))!=NULL)
printf(“%s\n”,direntp->d_name);
而((closedir(dirp)=-1)和&(errno==EINTR));
返回0;
}

您需要跳过“.”和“..”项。您也不应该执行chdir和getcwd。只需将目录名传递给listNewDir函数,即可打印该目录中的文件。(如果要保存名称,只需将名称strcpy到newDir即可。)

此外,for循环只会增加到10个,newDir只适用于20个条目。我想这些只是测试用的。

您可能会发现[ftw][1](文件树漫游)在这里很有用![1] :@joe:添加评论时,单击“帮助”链接查看如何在评论中嵌入链接-这与Q&a编辑器中使用的降价语法不同。@Clifford Ta,我想知道我搞砸了什么!:-)我不确定这个问题上的标签是否相关或有用。即使这是一个嵌入式系统的例子,这个问题是一般性的,也许不应该针对嵌入式空间-这将只是缩小你的观众不必要的。我建议只使用“C”和“Linux”或者“POSIX”,因为这似乎是正在使用的API。
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;
}