How To List Files in a Directory

There may come atime when you want to work with files/directories in your C programs, or maybe you're writing a program that needs to list the files in a specific directory. To work with directories in C we need to include the dirent.h header file to our code.
First include these library header files

  


#include <stdio.h>
#include <dirent.h>


Then we declare a dirent structure, the dirent structure holds information about a file or folder in a directory.

  


// structure that holds info of a file in a dir
struct dirent *dir;

// Open the current working directory
DIR *dir2 = opendir(".");


Now the dir2 variable points to the list of all files in a directory.
The opendir() takes a path of a direcotry you wish to work with as an argument, so in this example we're refering to the our current working direcotry, note that this depends on where you run the program.
Next we'll use a for loop to loop through all those files.


  


if (dir2 != NULL) {
    // the readdir returns a dirent strcuture for a specific file/directory
    for (dir = readdir(dir2); dir != NULL; dir = readdir(dir2)) {
        printf("%s\n", dir->d_name);
    }

    //close the directory
    closedir(dir2);
} else {
    printf("Error");
}

In the above code, we first make sured that the direcotry exists otherwise it prints out an error.
The readdir() returns a dirent structure which points to a specific file/folder.
We're not doing much here, we;re just printing out the name of the file/folder in the direcotry.
After you're done working with the directory make sure you always close it with the closedir() function.

Full Source Code:

  


#include <stdio.h>
#include <dirent.h>

int main() {
    // structure that holds info of a file in a dir
    struct dirent *dir;

    // Open the current working directory
    DIR *dir2 = opendir(".");
    if (dir2 != NULL) {
        // the readdir returns a dirent strcuture for a specific file/folder
        for (dir = readdir(dir2); dir != NULL; dir = readdir(dir2)) {
            printf("%s\n", dir->d_name);
        }

        //close the directory
        closedir(dir2);
    } else {
        printf("Error");
    }

    return 0;
}