10.12. Reading the Contents of a Directory
Problem
You need to read the contents of a directory, most likely to do something to each file or subdirectory that’s in it.
Solution
To write something portable, use the Boost Filesystem library’s classes and functions. It provides a number of handy utilities for manipulating files, such as a portable path representation, directory iterators, and numerous functions for renaming, deleting, and copying files, and so on. Example 10-19 demonstrates how to use a few of these facilities.
Example 10-19. Reading a directory
#include <iostream> #include <boost/filesystem/operations.hpp> #include <boost/filesystem/fstream.hpp> using namespace boost::filesystem; int main(int argc, char** argv) { if (argc < 2) { std::cerr << "Usage: " << argv[0] << " [dir name]\n"; return(EXIT_FAILURE); } path fullPath = // Create the full, absolute path name system_complete(path(argv[1], native)); if (!exists(fullPath)) { std::cerr << "Error: the directory " << fullPath.string() << " does not exist.\n"; return(EXIT_FAILURE); } if (!is_directory(fullPath)) { std::cout << fullPath.string() << " is not a directory!\n"; return(EXIT_SUCCESS); } directory_iterator end; for (directory_iterator it(fullPath); it != end; ++it) { // Iterate through each // element in the dir, std::cout << it->leaf(); // almost as you would if (is_directory(*it)) // an STL container std::cout << " (dir)"; std::cout << '\n'; } return(EXIT_SUCCESS); }
Discussion
Like creating or deleting directories ...
Get C++ Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.