仿照linux tree命令写出C语言版的代码
时间: 2024-09-23 07:10:28 浏览: 40
在C语言中,没有内置的`tree`命令那样的功能,但我们可以编写一个简单的树形结构和遍历函数来模拟类似的功能。这里是一个基本的例子,使用递归函数来打印目录结构:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct DirectoryNode {
char* name;
struct DirectoryNode* children; // 子节点指针
int num_children; // 子节点数量
} DirectoryNode;
// 创建一个新的目录节点
DirectoryNode* create_directory_node(char* name) {
DirectoryNode* node = (DirectoryNode*)malloc(sizeof(DirectoryNode));
node->name = strdup(name);
node->children = NULL;
node->num_children = 0;
return node;
}
// 添加子目录
void add_child(DirectoryNode** root, char* child_name) {
DirectoryNode* new_child = create_directory_node(child_name);
if (*root == NULL) {
*root = new_child;
} else {
DirectoryNode* current = *root;
while (current->num_children < sizeof(DirectoryNode)) { // 遍历到适当位置添加
if (!current->children[current->num_children]) {
current->children[current->num_children++] = new_child;
break;
}
current = current->children[current->num_children++];
}
}
}
// 打印树形结构
void print_tree(DirectoryNode* node, int level) {
for (int i = 0; i < level; i++) {
printf("| ");
}
printf("%s\n", node->name);
for (int i = 0; i < node->num_children; i++) {
print_tree(node->children[i], level + 1);
}
}
// 示例:创建一个包含子目录的目录树
int main() {
DirectoryNode* root = create_directory_node("root");
add_child(&root, "dir1");
add_child(&root, "dir2");
add_child(root, "file1"); // 直接添加文件,假设它也是子节点
print_tree(root, 0); // 开始打印树形结构
free(root); // 清理内存
return 0;
}
```
这个示例代码定义了一个简单的目录结构,并展示了如何添加子目录和打印目录树。注意这只是一个基础版本,实际应用中可能需要处理更复杂的情况,比如读取真实的目录内容。
阅读全文