dirent
imgui-node-editor
dirent | imgui-node-editor | |
---|---|---|
4 | 7 | |
1,013 | 3,356 | |
- | - | |
5.8 | 6.3 | |
3 months ago | about 2 months ago | |
C | C++ | |
MIT License | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
dirent
-
Iterate filesystem and store information in a struct array
#include #include #include #include #include #include #include typedef struct file_info { char *path; // ToDo: more info in the future } file_info; // Function prototypes bool is_special_file(const char *file); file_info **find_all_files(const char *root_dir); int find_files(const char *dir_path, file_info ***files, int *cap, int *cnt); file_info *file_info_new(const char *path); int main(int argc, char **argv) { find_all_files("/tmp/test"); // ToDo: Free all the memory correctly return 0; } file_info *file_info_new(const char *path) { file_info *file = malloc(sizeof(file_info)); if (!file) return NULL; file->path = path; return file; } file_info **find_all_files(const char *root_dir) { file_info **files = malloc(sizeof(file_info *)); int capacity = 1; int count = 0; int result = find_files(root_dir, &files, &capacity, &count); printf("Array cap: %d\n", capacity); printf("Array count: %d\n", count); printf("-------------------\n"); for (int i = 0; i < count; i++) { printf("%s\n", files[i]->path); } return files; } // Based on the implementation from https://github.com/tronkko/dirent int find_files(const char *dir_path, file_info ***files, int *cap, int *cnt) { char buffer[PATH_MAX + 2]; char *p = buffer; char *end = &buffer[PATH_MAX]; // Copy directory name to buffer const char *src = dir_path; while (p < end && *src != '\0') { *p++ = *src++; } *p = '\0'; // Open directory stream DIR *dir_stream = opendir(dir_path); if (!dir_stream) { printf("Failed to open %s (%s)\n", dir_path, strerror(errno)); return -1; } // Iterate all files/directories within the directory struct dirent *ent; while ((ent = readdir(dir_stream)) != NULL) { char *q = p; char c; // Get final character of directory name if (buffer < q) c = q[-1]; else c = ':'; // Append directory separator if not already there if (c != ':' && c != '/' && c != '\\') *q++ = '/'; // Append file name to current directory path src = ent->d_name; while (q < end && *src != '\0') { *q++ = *src++; } *q = '\0'; // Resize array if needed if (*cnt == *cap) { int realloc_size = (*cap) * 2; file_info **tmp_files = realloc(*files, realloc_size * sizeof(file_info *)); if (!tmp_files) exit(1); *cap *= 2; *files = tmp_files; } // Process every dirent type switch (ent->d_type) { case DT_LNK: { printf("[LINK] %s\n", buffer); (*files)[*cnt] = file_info_new(buffer); (*cnt)++; break; } case DT_REG: { printf("[FILE] %s\n", buffer); (*files)[*cnt] = file_info_new(buffer); (*cnt)++; break; } case DT_DIR: { if (!is_special_file(ent->d_name)) { printf("[DIR] %s\n", buffer); (*files)[*cnt] = file_info_new(buffer); (*cnt)++; find_files(buffer, files, cap, cnt); } break; } default: break; } } return 0; } bool is_special_file(const char *file) { if (strcmp(file, ".") != 0 && strcmp(file, "..") != 0) return false; return true; }
-
Iterate files/directories/subdirectories in C ?
Thanks for the reply. Yea, I wonder how I would go about implementing an iterative approach tho. I am currently working with the following implementation: https://github.com/tronkko/dirent/blob/master/include/dirent.h
-
How can you iterate up the directory tree until the program gets to the first?
You can use dirent for both if you include a compatibility shim for windows.
-
OGL - A Great Cross Platform OpenGL Base Library With Almost Everything OpenGL You might Ever need
dirent
imgui-node-editor
-
Visual Node Graph with ImGui
Looks more like https://github.com/thedmd/imgui-node-editor/ to me - both are great libraries though.
-
Phýsalis (try to rewrite on c++ blender extrude node)
I'm taking this low level node widget library: https://github.com/thedmd/imgui-node-editor
-
graphic library for creating a paint like application
This sort of node graph?
- PyFlow – visual and modular block programming in Python
-
PyFlow – Visual scripting framework for Python – NodeRED alternative?
It looks nice. If UI performance is a concern, one could move the GUI part to C++ and do some quick pybind11 Python bindings for better performance.
I've used this C++ ImGui node editor with similar features for some hacky synthesizer gui using this library: https://github.com/thedmd/imgui-node-editor
-
OGL - A Great Cross Platform OpenGL Base Library With Almost Everything OpenGL You might Ever need
imgui-node-editor
-
Suggestion needed: node editor GUI using C
Yes, I am looking for something like this https://github.com/thedmd/imgui-node-editor, but for C instead of C++
What are some alternatives?
imgui - Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies
nuklear - A single-header ANSI C immediate mode cross-platform GUI library
TinyErode - A portable C++ library for simulating hydraulic erosion.
DearPyGui - Dear PyGui: A fast and powerful Graphical User Interface Toolkit for Python with minimal dependencies
libcake - Librairie en C
stb - stb single-file public domain libraries for C/C++
glm
PyFlow - Visual scripting framework for python - https://wonderworks-software.github.io/PyFlow
PyQtGraph - Fast data visualization and GUI tools for scientific / engineering applications
avir - High-quality pro HDR image resizing / scaling C++ library, including a very fast, precise, SIMD Lanczos resizer (header-only C++)
awesome-dear-imgui - A collection of awesome dear imgui bindings, extensions and resources