dirent

C/C++ library for retrieving information on files and directories (by tronkko)

Dirent Alternatives

Similar projects and alternatives to dirent

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a better dirent alternative or higher similarity.

dirent reviews and mentions

Posts with mentions or reviews of dirent. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2022-05-06.
  • Iterate filesystem and store information in a struct array
    1 project | /r/C_Programming | 9 May 2022
    #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 ?
    2 projects | /r/C_Programming | 6 May 2022
    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?
    1 project | /r/C_Programming | 14 Feb 2022
    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
    17 projects | /r/opengl | 12 Jan 2022
    dirent
  • A note from our sponsor - SaaSHub
    www.saashub.com | 26 Apr 2024
    SaaSHub helps you find the best software and product alternatives Learn more →

Stats

Basic dirent repo stats
4
1,011
5.8
2 months ago

tronkko/dirent is an open source project licensed under MIT License which is an OSI approved license.

The primary programming language of dirent is C.


Sponsored
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com