【问题标题】:How can I print all directories and the files under those directories?如何打印所有目录和这些目录下的文件?
【发布时间】:2013-04-02 08:15:08
【问题描述】:

我在当前目录中搜索目录,如果我跨越一个目录,我再次进入并搜索目录和文件,但我找不到问题。我总是得到相同的结果和一些特定的目录。在代码中,我在数组中获取目录名称并打印它们。结果如下所示;

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;
}

【问题讨论】:

  • 您可能会发现 [ftw][1](文件树遍历)在这里有帮助! [1]:linux.die.net/man/3/ftw
  • @joe:添加评论时,点击“帮助”链接查看如何在评论中嵌入链接——它与问答编辑器中使用的 Markdown 语法不同。
  • @Clifford Ta,我想知道我搞砸了什么! :-)
  • 我不确定这个问题的标签是否相关或有用。即使这是针对例如嵌入式系统,问题本质上是一般性的,并且不应该针对嵌入式空间 - 这只会不必要地缩小您的受众范围。我建议只使用“C”和“Linux”或者可能是“POSIX”,因为这似乎是正在使用的 API。

标签: c embedded system systems-programming


【解决方案1】:

您需要跳过“。”和“..”条目。您也不应该执行 chdir 和 getcwd。只需将目录名称传递给您的 listNewDir 函数即可打印该目录中的文件。 (如果您想保存名称,只需将名称 strcpy 到 newDir 即可。)
此外,for 循环最多只能达到 10 个,而 newDir 只适用于 20 个条目。我想这些只是为了测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-15
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2016-05-03
    相关资源
    最近更新 更多