欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

c 遍歷文件夾輸出json

林玟書1年前10瀏覽0評論

在 C 語言中,我們可以使用標準庫中的 dirent.h 頭文件來遍歷文件夾和文件,同時通過 cJSON 庫來輸出 json 格式的數據。

#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#include <cJSON.h>
#define MAX_PATH 1024
bool is_directory(char *path) {
DIR *dir = opendir(path);
if (dir != NULL) {
closedir(dir);
return true;
}
return false;
}
void traverse_directory(char *path, cJSON *json_obj) {
DIR *dir;
struct dirent *entry;
char subpath[MAX_PATH];
if ((dir = opendir(path)) == NULL) {
perror("opendir error");
exit(EXIT_FAILURE);
}
while ((entry = readdir(dir)) != NULL) {
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
continue;
sprintf(subpath, "%s/%s", path, entry->d_name);
if (is_directory(subpath)) {
cJSON *new_json_obj = cJSON_CreateObject();
cJSON_AddItemToObject(json_obj, entry->d_name, new_json_obj);
traverse_directory(subpath, new_json_obj);
} else {
cJSON_AddItemToObject(json_obj, entry->d_name, cJSON_CreateString(subpath));
}
}
closedir(dir);
}
int main(int argc, char **argv) {
char *path = argc >1 ? argv[1] : ".";
cJSON *json_obj = cJSON_CreateObject();
traverse_directory(path, json_obj);
char *json_str = cJSON_Print(json_obj);
printf("%s", json_str);
free(json_str);
cJSON_Delete(json_obj);
return 0;
}

上面的代碼中,我們定義了一個 is_directory 函數來判斷一個路徑是否是文件夾,如果是文件夾就返回 true,否則返回 false。同時,我們還定義了一個 traverse_directory 函數來遍歷文件夾和文件,并且使用 cJSON 庫來輸出 json 格式的數據。

在 main 函數中,我們先定義了一個 json_obj 指針,然后通過 traverse_directory 函數來遍歷指定的路徑,最后使用 cJSON_Print 把 json_obj 輸出為字符串,并通過 printf 輸出到控制臺。

完整的代碼示例可以在 GitHub 上找到:https://github.com/TroyLiu1996/c-traverse-directory-and-output-json