How do you get a directory listing in C? How do you get a directory listing in C? c c

How do you get a directory listing in C?


The following POSIX program will print the names of the files in the current directory:

#define _XOPEN_SOURCE 700#include <stdio.h>#include <sys/types.h>#include <dirent.h>int main (void){  DIR *dp;  struct dirent *ep;       dp = opendir ("./");  if (dp != NULL)  {    while (ep = readdir (dp))      puts (ep->d_name);    (void) closedir (dp);  }  else    perror ("Couldn't open the directory");  return 0;}

Credit: http://www.gnu.org/software/libtool/manual/libc/Simple-Directory-Lister.html

Tested in Ubuntu 16.04.


The strict answer is "you can't", as the very concept of a folder is not truly cross-platform.

On MS platforms you can use _findfirst, _findnext and _findclose for a 'c' sort of feel, and FindFirstFile and FindNextFile for the underlying Win32 calls.

Here's the C-FAQ answer:

http://c-faq.com/osdep/readdir.html


I've created an open source (BSD) C header that deals with this problem. It currently supports POSIX and Windows. Please check it out:

https://github.com/cxong/tinydir

tinydir_dir dir;tinydir_open(&dir, "/path/to/dir");while (dir.has_next){    tinydir_file file;    tinydir_readfile(&dir, &file);    printf("%s", file.name);    if (file.is_dir)    {        printf("/");    }    printf("\n");    tinydir_next(&dir);}tinydir_close(&dir);