1*98cd9557SMatthias RingwaldTinyDir 2*98cd9557SMatthias Ringwald======= 3*98cd9557SMatthias Ringwald[](https://travis-ci.org/cxong/tinydir) 4*98cd9557SMatthias Ringwald[](https://github.com/cxong/tinydir/releases/latest) 5*98cd9557SMatthias Ringwald 6*98cd9557SMatthias RingwaldLightweight, portable and easy to integrate C directory and file reader. TinyDir wraps dirent for POSIX and FindFirstFile for Windows. 7*98cd9557SMatthias Ringwald 8*98cd9557SMatthias RingwaldWindows unicode is supported by defining `UNICODE` and `_UNICODE` before including `tinydir.h`. 9*98cd9557SMatthias Ringwald 10*98cd9557SMatthias RingwaldExample 11*98cd9557SMatthias Ringwald======= 12*98cd9557SMatthias Ringwald 13*98cd9557SMatthias RingwaldThere are two methods. Error checking omitted: 14*98cd9557SMatthias Ringwald 15*98cd9557SMatthias Ringwald```C 16*98cd9557SMatthias Ringwaldtinydir_dir dir; 17*98cd9557SMatthias Ringwaldtinydir_open(&dir, "/path/to/dir"); 18*98cd9557SMatthias Ringwald 19*98cd9557SMatthias Ringwaldwhile (dir.has_next) 20*98cd9557SMatthias Ringwald{ 21*98cd9557SMatthias Ringwald tinydir_file file; 22*98cd9557SMatthias Ringwald tinydir_readfile(&dir, &file); 23*98cd9557SMatthias Ringwald 24*98cd9557SMatthias Ringwald printf("%s", file.name); 25*98cd9557SMatthias Ringwald if (file.is_dir) 26*98cd9557SMatthias Ringwald { 27*98cd9557SMatthias Ringwald printf("/"); 28*98cd9557SMatthias Ringwald } 29*98cd9557SMatthias Ringwald printf("\n"); 30*98cd9557SMatthias Ringwald 31*98cd9557SMatthias Ringwald tinydir_next(&dir); 32*98cd9557SMatthias Ringwald} 33*98cd9557SMatthias Ringwald 34*98cd9557SMatthias Ringwaldtinydir_close(&dir); 35*98cd9557SMatthias Ringwald``` 36*98cd9557SMatthias Ringwald 37*98cd9557SMatthias Ringwald```C 38*98cd9557SMatthias Ringwaldtinydir_dir dir; 39*98cd9557SMatthias Ringwaldint i; 40*98cd9557SMatthias Ringwaldtinydir_open_sorted(&dir, "/path/to/dir"); 41*98cd9557SMatthias Ringwald 42*98cd9557SMatthias Ringwaldfor (i = 0; i < dir.n_files; i++) 43*98cd9557SMatthias Ringwald{ 44*98cd9557SMatthias Ringwald tinydir_file file; 45*98cd9557SMatthias Ringwald tinydir_readfile_n(&dir, &file, i); 46*98cd9557SMatthias Ringwald 47*98cd9557SMatthias Ringwald printf("%s", file.name); 48*98cd9557SMatthias Ringwald if (file.is_dir) 49*98cd9557SMatthias Ringwald { 50*98cd9557SMatthias Ringwald printf("/"); 51*98cd9557SMatthias Ringwald } 52*98cd9557SMatthias Ringwald printf("\n"); 53*98cd9557SMatthias Ringwald} 54*98cd9557SMatthias Ringwald 55*98cd9557SMatthias Ringwaldtinydir_close(&dir); 56*98cd9557SMatthias Ringwald``` 57*98cd9557SMatthias Ringwald 58*98cd9557SMatthias RingwaldSee the `/samples` folder for more examples, including an interactive command-line directory navigator. 59*98cd9557SMatthias Ringwald 60*98cd9557SMatthias RingwaldLanguage 61*98cd9557SMatthias Ringwald======== 62*98cd9557SMatthias Ringwald 63*98cd9557SMatthias RingwaldANSI C, or C90. 64*98cd9557SMatthias Ringwald 65*98cd9557SMatthias RingwaldPlatforms 66*98cd9557SMatthias Ringwald========= 67*98cd9557SMatthias Ringwald 68*98cd9557SMatthias RingwaldPOSIX and Windows supported. Open to the possibility of supporting other platforms. 69*98cd9557SMatthias Ringwald 70*98cd9557SMatthias RingwaldLicense 71*98cd9557SMatthias Ringwald======= 72*98cd9557SMatthias Ringwald 73*98cd9557SMatthias RingwaldSimplified BSD; if you use tinydir you can comply by including `tinydir.h` or `COPYING` somewhere in your package. 74*98cd9557SMatthias Ringwald 75*98cd9557SMatthias RingwaldKnown Limitations 76*98cd9557SMatthias Ringwald================= 77*98cd9557SMatthias Ringwald 78*98cd9557SMatthias Ringwald- Limited path and filename sizes 79*98cd9557SMatthias Ringwald- [Possible race condition bug if folder being read has changing content](https://github.com/cxong/tinydir/issues/13) 80