Note: To find out how to list a directory non-recursively, just replace recursive_directory_iterator
by directory_iterator
or see our full post How to list a directory using C++17 filesystem library.
To recursively list a directory using the C++17 filesystem library use this snippet:
#include <experimental/filesystem> using namespace std::experimental::filesystem; for(const directory_entry& entry : recursive_directory_iterator("my-directory")) { const auto& path = entry.path(); // ... }
Full example:
#include <iostream> #include <string> #include <experimental/filesystem> using namespace std; using namespace std::experimental::filesystem; int main() { for(const directory_entry& entry : recursive_directory_iterator("my-directory")) { // Is it a file / directory? bool isNormalFile = is_regular_file(entry); bool isDirectory = is_directory(entry); auto path = entry.path(); // Path: my-directory/test.txt string pathString = path.string(); // Filename: test.txt string filenameString = path.filename().string(); // Extension: txt string extensionString = path.extension().string(); // NOTE: You can also "cout << path" directly } }
Compile like this:
g++ -o filesystem-example filesystem-example.cpp -lstdc++fs
For this directory:
my-directory ├── subdirectory │ └── subdir-test.txt └── test.txt
this will list subdirectory
, subdirectory/subdir-test.txt
and test.txt
.