/* listdir_verbose * * Small example application which lists all files in a given directory and * (optionally) recursively the content of its subdirectories. * * It demonstrates the use of the ostream_iterator with the * filesystem::file_iterator. */ /* Note: Do not include config.h in your own programs. See README. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include using namespace std ; using filesystem::file_iterator ; using filesystem::file_t ; using filesystem::isDirectory ; int main (int argc, char** argv) { if ((argc < 2) || (argc > 3)) { cerr << "Usage: listdir_verbose [ -r ] /some/directory" << endl ; return -1 ; } bool recursive = false ; if (argc == 3) { if (string (argv[1]) == "-r") { recursive = true ; } else { cerr << "Bad argument: \"" << argv[1] << "\"" << endl ; return -2 ; } } string dir (argv[argc - 1]) ; file_iterator<> i (dir); // The file_iterator does not provide the top-level directory during // iterations, so we output it by hand: cout << i.currentDirectory () << endl ; while (i != i.end ()) { file_t cur_file = *i ; cout << (isDirectory (cur_file.getName ()) ? "[dir ] " : "[file] ") ; cout << cur_file << endl ; // The default behaviour of file_iterator is to descend into // subdirectories. But fortunately it provides a method to advance the // iterator by hand without descending into subdirectories: if (!recursive) { i.advance (false) ; } else { // behind the scenes, this calls in fact "advance (true)" ;-) i++ ; } // Or simply: "i.advance (recursive)" ;-) } return 0 ; }