当前位置: 首页 > 面试题库 >

如何在Linux上的C中递归列出目录?

岳阳飙
2023-03-14
问题内容

我需要在C编程中递归列出所有目录和文件。我已经研究了FTW,但是我所使用的2个操作系统(Fedora和Minix)中没有包括。在过去的几个小时中,我从阅读的所有不同内容中开始感到头疼。

如果有人知道我的代码片段,那真是太棒了,或者如果有人可以给我很好的指导,我将不胜感激。


问题答案:

这是一个递归版本:

#include <unistd.h>
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <string.h>

void listdir(const char *name, int indent)
{
    DIR *dir;
    struct dirent *entry;

    if (!(dir = opendir(name)))
        return;

    while ((entry = readdir(dir)) != NULL) {
        if (entry->d_type == DT_DIR) {
            char path[1024];
            if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
                continue;
            snprintf(path, sizeof(path), "%s/%s", name, entry->d_name);
            printf("%*s[%s]\n", indent, "", entry->d_name);
            listdir(path, indent + 2);
        } else {
            printf("%*s- %s\n", indent, "", entry->d_name);
        }
    }
    closedir(dir);
}

int main(void) {
    listdir(".", 0);
    return 0;
}


 类似资料:
  • 根据这个QA,我们可以使用参数,用于添加要标记为白名单的目录,因为在git上找到了最新的CVE。但似乎没有办法递归地添加某些dir。 我有太多的存储库要添加,所以如果该功能存在,我想改用递归添加。存储库主要放在我在ubuntu上安装的NTFS磁盘上,所以里面的文件的所有者总是root用户。如果登录的用户与git目录的所有者不匹配,则最新更新会显示错误,例如

  • 问题内容: 这类似于这个问题,但是我想在Unix中包括相对于当前目录的路径。如果我执行以下操作: 它不包括完整路径。例如,我具有以下目录结构: 上面的代码将返回: 如何使用标准Unix命令使其包含相对于当前目录的路径? 问题答案: 使用查找: 在使用GNU find的系统上,像大多数GNU / Linux发行版一样,您可以省略-print。

  • 问题内容: 如何递归计算Linux目录中的文件? 我找到了这个: 但是,当我运行它时,它返回以下错误。 查找:路径必须在表达式之前:¦ 问题答案: 这应该工作: 说明: 仅包含文件。 ( 而不是)将命令的标准输出重定向到命令的标准输入。 (字数计数的缩写)在其输入(docs)上计算换行符,单词和字节。 仅计算换行符。 笔记: 更换用在当前文件夹要执行的命令。 您也可以删除,以在计数中包含目录(和符

  • 问题内容: 目录类似于: 我正在使用与PHPMyAdmin使用的相同的PHPZip类。我不确定如何压缩目录而不是仅压缩文件。这是我到目前为止的内容: 但是当我尝试解压缩相应的已下载的zip文件时,出现“不允许操作” 仅当我尝试在Mac上解压缩时,才出现此错误,当我通过命令行解压缩时,文件解压缩就可以了。我是否需要在下载时发送特定的内容类型,当前为“application / zip” 问题答案:

  • 问题内容: 如何在Android中递归扫描目录并显示文件名?我正在尝试扫描,但是速度很慢(强制关闭或等待)。我正在使用对此问题单独回答中给出的类。 问题答案: 您几乎应该始终仅从非UI线程访问文件系统。否则,您可能会长时间阻塞UI线程并获得ANR。在运行FileWalker 的。 这是FileWalker的稍微优化的版本: 您可以从这样的后台线程调用它:

  • 问题内容: 在终端我可以打电话给。现在,我想要一个c程序为我做这件事,像这样: 这将一切。但是,当我尝试: 我会收到一个运行时错误: ls:* /:没有这样的文件或目录 问题答案: 不幸的是,所有基于shell扩展的解决方案都受到最大命令行长度的限制。哪个有所不同(可以找出答案);在我的系统上,大约有2 MB。是的,许多人会争辩说它就足够了-一次比尔·盖茨就拥有640 KB的容量。 (在非共享文件