Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I get the list of files in a directory using C or C++?

How can I determine the list of files in a directory from inside my C or C++ code?

I'm not allowed to execute the ls command and parse the results from within my program.

like image 718
samoz Avatar asked Mar 04 '09 19:03

samoz


People also ask

How can I get the list of files in a directory using C?

Call opendir() function to open all file in present directory. Initialize dr pointer as dr = opendir("."). If(dr) while ((en = readdir(dr)) != NULL) print all the file name using en->d_name.


1 Answers

UPDATE 2017:

In C++17 there is now an official way to list files of your file system: std::filesystem. There is an excellent answer from Shreevardhan below with this source code (This code may throw):

#include <string> #include <iostream> #include <filesystem> namespace fs = std::filesystem;  int main() {     std::string path = "/path/to/directory";     for (const auto & entry : fs::directory_iterator(path))         std::cout << entry.path() << std::endl; } 

Old Answer:

In small and simple tasks I do not use boost, I use dirent.h. It is available as a standard header in UNIX, and also available for Windows via a compatibility layer created by Toni Ronkko.

DIR *dir; struct dirent *ent; if ((dir = opendir ("c:\\src\\")) != NULL) {   /* print all the files and directories within directory */   while ((ent = readdir (dir)) != NULL) {     printf ("%s\n", ent->d_name);   }   closedir (dir); } else {   /* could not open directory */   perror ("");   return EXIT_FAILURE; } 

It is just a small header file and does most of the simple stuff you need without using a big template-based approach like boost(no offence, I like boost!).

like image 121
Peter Parker Avatar answered Oct 17 '22 20:10

Peter Parker