table of contents
        
      
      
    | std::filesystem::recursive_directory_iterator::disable_recursion_pending(3) | C++ Standard Libary | std::filesystem::recursive_directory_iterator::disable_recursion_pending(3) | 
NAME¶
std::filesystem::recursive_directory_iterator::disable_recursion_pending - std::filesystem::recursive_directory_iterator::disable_recursion_pending
Synopsis¶
void disable_recursion_pending(); (since C++17)
  
   Disables recursion to the currently referred subdirectory, if any.
  
   The call modifies the pending recursion flag on the iterator in such a way
    that the
  
   next time increment is called, the iterator will advance within the current
  
   directory even if it is currently referring to a subdirectory that hasn't
    been
  
   visited.
  
   The status of the pending recursion flag can be queried with
    recursion_pending(),
  
   which is false after this call. It is reset back to true after increment, and
    its
  
   initial value is also true.
  
   The behavior is undefined if *this is the end iterator.
Parameters¶
(none)
Return value¶
(none)
Exceptions¶
May throw implementation-defined exceptions.
Example¶
// Run this code
  
   #include <cstdlib>
  
   #include <fstream>
  
   #include <iostream>
  
   #include <string>
  
   #include <filesystem>
  
   namespace fs = std::filesystem;
  
   int main()
  
   {
  
   fs::current_path(fs::temp_directory_path());
  
   fs::create_directories("sandbox/a/b/c");
  
   fs::create_directories("sandbox/a/b/d/e");
  
   std::ofstream("sandbox/a/b/file1.txt");
  
   fs::create_symlink("a", "sandbox/syma");
  
   std::system("tree sandbox");
  
   for(auto i = fs::recursive_directory_iterator("sandbox");
  
   i != fs::recursive_directory_iterator();
  
   ++i ) {
  
   std::cout << std::string(i.depth()*2, ' ') << *i;
  
   if(fs::is_symlink(i->symlink_status()))
  
   std::cout << " -> " << fs::read_symlink(*i);
  
   std::cout << '\n';
  
   // do not descend into "b"
  
   if(i->path().filename() == "b")
  
   i.disable_recursion_pending();
  
   }
  
   fs::remove_all("sandbox");
  
   }
Possible output:¶
 sandbox
  
   ├── a
  
   │ └── b
  
   │ ├── c
  
   │ ├── d
  
   │ │ └── e
  
   │ └── file1.txt
  
   └── syma -> a
  
   "sandbox/a"
  
   "sandbox/a/b"
  
   "sandbox/syma" -> "a"
See also¶
 recursion_pending checks whether the recursion is disabled for
    the current directory
  
   (public member function)
  
   increment advances to the next entry
  
   operator++ (public member function)
| 2022.07.31 | http://cppreference.com |