198cd9557SMatthias RingwaldTinyDir 298cd9557SMatthias Ringwald======= 3*e9d8dc8bSDirk Helbig[](https://github.com/cxong/tinydir/actions/workflows/cmake.yml) 498cd9557SMatthias Ringwald[](https://github.com/cxong/tinydir/releases/latest) 598cd9557SMatthias Ringwald 698cd9557SMatthias RingwaldLightweight, portable and easy to integrate C directory and file reader. TinyDir wraps dirent for POSIX and FindFirstFile for Windows. 798cd9557SMatthias Ringwald 898cd9557SMatthias RingwaldWindows unicode is supported by defining `UNICODE` and `_UNICODE` before including `tinydir.h`. 998cd9557SMatthias Ringwald 1098cd9557SMatthias RingwaldExample 1198cd9557SMatthias Ringwald======= 1298cd9557SMatthias Ringwald 1398cd9557SMatthias RingwaldThere are two methods. Error checking omitted: 1498cd9557SMatthias Ringwald 1598cd9557SMatthias Ringwald```C 1698cd9557SMatthias Ringwaldtinydir_dir dir; 1798cd9557SMatthias Ringwaldtinydir_open(&dir, "/path/to/dir"); 1898cd9557SMatthias Ringwald 1998cd9557SMatthias Ringwaldwhile (dir.has_next) 2098cd9557SMatthias Ringwald{ 2198cd9557SMatthias Ringwald tinydir_file file; 2298cd9557SMatthias Ringwald tinydir_readfile(&dir, &file); 2398cd9557SMatthias Ringwald 2498cd9557SMatthias Ringwald printf("%s", file.name); 2598cd9557SMatthias Ringwald if (file.is_dir) 2698cd9557SMatthias Ringwald { 2798cd9557SMatthias Ringwald printf("/"); 2898cd9557SMatthias Ringwald } 2998cd9557SMatthias Ringwald printf("\n"); 3098cd9557SMatthias Ringwald 3198cd9557SMatthias Ringwald tinydir_next(&dir); 3298cd9557SMatthias Ringwald} 3398cd9557SMatthias Ringwald 3498cd9557SMatthias Ringwaldtinydir_close(&dir); 3598cd9557SMatthias Ringwald``` 3698cd9557SMatthias Ringwald 3798cd9557SMatthias Ringwald```C 3898cd9557SMatthias Ringwaldtinydir_dir dir; 3998cd9557SMatthias Ringwaldint i; 4098cd9557SMatthias Ringwaldtinydir_open_sorted(&dir, "/path/to/dir"); 4198cd9557SMatthias Ringwald 4298cd9557SMatthias Ringwaldfor (i = 0; i < dir.n_files; i++) 4398cd9557SMatthias Ringwald{ 4498cd9557SMatthias Ringwald tinydir_file file; 4598cd9557SMatthias Ringwald tinydir_readfile_n(&dir, &file, i); 4698cd9557SMatthias Ringwald 4798cd9557SMatthias Ringwald printf("%s", file.name); 4898cd9557SMatthias Ringwald if (file.is_dir) 4998cd9557SMatthias Ringwald { 5098cd9557SMatthias Ringwald printf("/"); 5198cd9557SMatthias Ringwald } 5298cd9557SMatthias Ringwald printf("\n"); 5398cd9557SMatthias Ringwald} 5498cd9557SMatthias Ringwald 5598cd9557SMatthias Ringwaldtinydir_close(&dir); 5698cd9557SMatthias Ringwald``` 5798cd9557SMatthias Ringwald 5898cd9557SMatthias RingwaldSee the `/samples` folder for more examples, including an interactive command-line directory navigator. 5998cd9557SMatthias Ringwald 6098cd9557SMatthias RingwaldLanguage 6198cd9557SMatthias Ringwald======== 6298cd9557SMatthias Ringwald 6398cd9557SMatthias RingwaldANSI C, or C90. 6498cd9557SMatthias Ringwald 6598cd9557SMatthias RingwaldPlatforms 6698cd9557SMatthias Ringwald========= 6798cd9557SMatthias Ringwald 6898cd9557SMatthias RingwaldPOSIX and Windows supported. Open to the possibility of supporting other platforms. 6998cd9557SMatthias Ringwald 7098cd9557SMatthias RingwaldLicense 7198cd9557SMatthias Ringwald======= 7298cd9557SMatthias Ringwald 7398cd9557SMatthias RingwaldSimplified BSD; if you use tinydir you can comply by including `tinydir.h` or `COPYING` somewhere in your package. 7498cd9557SMatthias Ringwald 7598cd9557SMatthias RingwaldKnown Limitations 7698cd9557SMatthias Ringwald================= 7798cd9557SMatthias Ringwald 7898cd9557SMatthias Ringwald- Limited path and filename sizes 7998cd9557SMatthias Ringwald- [Possible race condition bug if folder being read has changing content](https://github.com/cxong/tinydir/issues/13) 80*e9d8dc8bSDirk Helbig- Does not support extended-length path lengths in Windows - paths are limited to 260 characters. See <https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry> 81