Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Describes an input iterator that sequences through the filenames in a directory, possibly descending into subdirectories recursively. For an iterator X, the expression *X evaluates to an object of class directory_entry that wraps the filename and anything known about its status.
For more information and code examples, see File System Navigation (C++).
Syntax
class recursive_directory_iterator;
Remarks
The class template stores:
an object of type
stack<pair<directory_iterator, path>>, calledmystackhere for the purposes of exposition, which represents the nest of directories to be sequencedan object of type
directory_entrycalledmyentryhere, which represents the current filename in the directory sequencean object of type
bool, calledno_pushhere, which records whether recursive descent into subdirectories is disabledan object of type
directory_options, calledmyoptionshere, which records the options established at construction
A default constructed object of type recursive_directory_entry has an end-of-sequence iterator at mystack.top().first and represents the end-of-sequence iterator. For example, given the directory abc with entries def (a directory), def/ghi, and jkl, the code:
for (recursive_directory_iterator next(path("abc")), end; next != end; ++next)
visit(next->path());
will call visit with the arguments path("abc/def/ghi") and path("abc/jkl"). You can qualify sequencing through a directory subtree in two ways:
A directory symlink will be scanned only if you construct a
recursive_directory_iteratorwith adirectory_optionsargument whose value isdirectory_options::follow_directory_symlink.If you call
disable_recursion_pending, a subsequent directory encountered during an increment won't be recursively scanned.
Constructors
| Constructor | Description |
|---|---|
| recursive_directory_iterator | Constructs a recursive_directory_iterator. |
Member functions
| Member function | Description |
|---|---|
| depth | Returns mystack.size() - 1, so pval is at depth zero. |
| disable_recursion_pending | Stores true in no_push. |
| increment | Advances to the next filename in sequence. |
| options | Returns myoptions. |
| pop | Returns the next object. |
| recursion_pending | Returns !no_push. |
Operators
| Operator | Description |
|---|---|
| operator!= | Returns !(*this == right). |
| operator= | The defaulted member assignment operators behave as expected. |
| operator== | Returns true only if both *this and right are end-of-sequence iterators or both aren't end-of-sequence-iterators. |
| operator* | Returns myentry. |
| operator-> | Returns &**this. |
| operator++ | Increments the recursive_directory_iterator. |
Requirements
Header: <filesystem>
Namespace: std::tr2::sys
recursive_directory_iterator::depth
Returns mystack.size() - 1, so pval is at depth zero.
int depth() const;
recursive_directory_iterator::disable_recursion_pending
Stores true in no_push.
void disable_recursion_pending();
recursive_directory_iterator::increment
Advances to the next filename in sequence.
recursive_directory_iterator& increment(error_code& ec) noexcept;
Parameters
ec
Specified error code.
Remarks
The function attempts to advance to the next filename in the nested sequence. If successful, it stores that filename in myentry; otherwise it produces an end-of-sequence iterator.
recursive_directory_iterator::operator!=
Returns !(*this == right).
bool operator!=(const recursive_directory_iterator& right) const;
Parameters
right
The recursive_directory_iterator for comparison.
recursive_directory_iterator::operator=
The defaulted member assignment operators behave as expected.
recursive_directory_iterator& operator=(const recursive_directory_iterator&) = default;
recursive_directory_iterator& operator=(recursive_directory_iterator&&) noexcept = default;
Parameters
recursive_directory_iterator
The recursive_directory_iterator being copied into the recursive_directory_iterator.
recursive_directory_iterator::operator==
Returns true only if both *this and right are end-of-sequence iterators or both aren't end-of-sequence-iterators.
bool operator==(const recursive_directory_iterator& right) const;
Parameters
right
The recursive_directory_iterator for comparison.
recursive_directory_iterator::operator*
Returns myentry.
const directory_entry& operator*() const;
recursive_directory_iterator::operator->
Returns &**this.
const directory_entry * operator->() const;
recursive_directory_iterator::operator++
Increments the recursive_directory_iterator.
recursive_directory_iterator& operator++();
recursive_directory_iterator& operator++(int);
Parameters
int
The specified increment.
Remarks
The first member function calls increment(), then returns *this. The second member function makes a copy of the object, calls increment(), then returns the copy.
recursive_directory_iterator::options
Returns myoptions.
directory_options options() const;
recursive_directory_iterator::pop
Returns the next object.
void pop();
Remarks
If depth() == 0 the object becomes an end-of-sequence iterator. Otherwise, the member function terminates scanning of the current (deepest) directory and resumes at the next lower depth.
recursive_directory_iterator::recursion_pending
Returns !no_push.
bool recursion_pending() const;
recursive_directory_iterator::recursive_directory_iterator
Constructs a recursive_directory_iterator.
recursive_directory_iterator() noexcept;
explicit recursive_directory_iterator(const path& pval);
recursive_directory_iterator(const path& pval,
error_code& ec) noexcept;
recursive_directory_iterator(const path& pval,
directory_options opts);
recursive_directory_iterator(const path& pval,
directory_options opts,
error_code& ec) noexcept;
recursive_directory_iterator(const recursive_directory_iterator&) = default;
recursive_directory_iterator(recursive_directory_iterator&&) noexcept = default;
Parameters
pval
The specified path.
error_code
The specified error code.
opts
The specified directory options.
recursive_directory_iterator
The recursive_directory_iterator of which the constructed recursive_directory_iterator is to be a copy.
Remarks
The first constructor produces an end-of-sequence iterator. The second and third constructors store false in no_push and directory_options::none in myoptions, then attempt to open and read pval as a directory. If successful, they initialize mystack and myentry to designate the first non-directory filename in the nested sequence; otherwise they produce an end-of-sequence iterator.
The fourth and fifth constructors behave the same as the second and third, except that they first store opts in myoptions. The default constructor behaves as expected.
See also
Header Files Reference
<filesystem>
File System Navigation (C++)