Sponsored Link •
|
This program shows how to use UNIX-style directory processing functions. It is from the article Reading Unix-style Directories via STL-compliant Sequences.
#include <dirent.h> // opendir(), readdir(), closedir() #include <sys/stat.h> // stat() #include <algorithm> // std::copy #include <iterator> // std::ostream_iterator #include <iostream> // std::cout, std::endl #include <string> // std::string #include <vector> // std::vector using std::copy; using std::cout; using std::endl; using std::ostream_iterator; using std::string; using std::vector; const char HOME[] = "/home/matty/"; int main() { vector<string> dirNames; DIR *dir = opendir(HOME); if(NULL != dir) { struct dirent *entry; for(; NULL != (entry = readdir(dir)); ) { struct stat st; // Skip dots if( '.' == entry->d_name[0] && ( '\0' == entry->d_name[1] || ( '.' == entry->d_name[1] && '\0' == entry->d_name[2]))) { // do nothing } else { if(0 == stat((string(HOME) + entry->d_name).c_str(), &st)) { if(S_IFDIR == (st.st_mode & S_IFDIR)) { dirNames.push_back(entry->d_name); } } } } closedir(dir); } cout << "Dumping subdirectories of " << HOME << endl; copy(dirNames.begin(), dirNames.end(), ostream_iterator<string>(cout, "\n")); return 0; }
Sponsored Links
|