home | help
std::filesy...ion_pending(3)   C++ Standard Libary  std::filesy...ion_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 cur-
     rent
	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  recur-
     sion_pending(),
	which  is  false  after this call. It is reset back to true after incre-
     ment, 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 <filesystem>
      #include <fstream>
      #include <iostream>
      #include <string>
      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
      aaa a
      a   aaa b
      a       aaa c
      a       aaa d
      a       a   aaa e
      a       aaa file1.txt
      aaa syma -> a

      "sandbox/a"
	"sandbox/a/b"
      "sandbox/syma" -> "a"

See also
	recursion_pending checks whether the recursion is disabled for the  cur-
     rent directory
			  (public member function)
	increment	  advances to the next entry
	operator++	  (public member function)

http://cppreference.com 	   2024.06.10	    std::filesy...ion_pending(3)

home | help