📜  c 编程中 LS 的递归版本 (1)

📅  最后修改于: 2023-12-03 15:13:48.365000             🧑  作者: Mango

以C编程中LS的递归版本

在C编程中,实现一个简单的LS(列出目录内容)命令是一个常见的任务。LS命令可以显示当前目录下的文件和子目录。

下面是一个使用递归方法实现LS功能的C程序的示例:

#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>

void ls_recursive(const char* path) {
    DIR* dir;
    struct dirent* entry;
    struct stat info;

    if ((dir = opendir(path)) == NULL) {
        printf("无法打开目录:%s\n", path);
        return;
    }

    printf("目录:%s\n", path);

    while ((entry = readdir(dir)) != NULL) {
        char full_path[1024];
        snprintf(full_path, sizeof(full_path), "%s/%s", path, entry->d_name);

        if (stat(full_path, &info) == -1) {
            printf("无法获取文件信息:%s\n", full_path);
            continue;
        }

        if (S_ISDIR(info.st_mode)) {
            if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
                continue;
            }

            printf("子目录:%s\n", entry->d_name);
            ls_recursive(full_path);
        } else {
            printf("文件:%s\n", entry->d_name);
        }
    }

    closedir(dir);
}

int main() {
    ls_recursive(".");
    return 0;
}

此程序使用了递归的方法列出了指定目录下的所有文件和子目录。它会首先打开指定的目录,然后通过readdir函数遍历目录中所有的文件和子目录。对于每个文件或子目录,它会判断文件类型,如果是子目录,则递归调用自己来进一步列出子目录中的文件和子目录。

请注意,此示例程序仅用于演示目的,并未添加错误处理。实际上,在您编写更完整的版本时,应该添加更多的错误检查和适当的错误处理。

希望对你有所帮助!