|
|
|
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
|