Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::filesy...try::assign(3)  C++ Standard Libary std::filesy...try::assign(3)

NAME
       std::filesystem::directory_entry::assign	   -   std::filesystem::direc-
       tory_entry::assign

Synopsis
	  void	   assign(     const	 std::filesystem::path&	     p	    );
       (since C++17)
	  void assign( const std::filesystem::path& p, std::error_code&	ec );

	  Assigns  new content to the directory	entry object. Sets the path to
       p and calls
	  refresh to update the	cached attributes. If  an  error  occurs,  the
       values of the
	  cached attributes are	unspecified.

	  This function	does not commit	any changes to the filesystem.

Parameters
	  p  - path to the filesystem object to	which the directory entry will
       refer
	  ec - out-parameter for error reporting in the	non-throwing overload

Return value
	  (none)

Exceptions
	  The overload that does not take a std::error_code& parameter throws
	  filesystem::filesystem_error	on  underlying	OS  API	 errors,  con-
       structed	with p as the
	  first	path argument and the OS error code as the  error  code	 argu-
       ment. The overload
	  taking a std::error_code& parameter sets it to the OS	API error code
       if an OS	API
	  call fails, and executes ec.clear() if no errors occur. Any overload
       not marked
	  noexcept may throw std::bad_alloc if memory allocation fails.

Example
       // Run this code

	#include <filesystem>
	#include <fstream>
	#include <iostream>

	void print_entry_info(const std::filesystem::directory_entry& entry)
	{
	    std::cout << "the entry " << entry;
	    if (not entry.exists()) {
		std::cout << " does not	exists on the file system\n";
		return;
	    }
	    std::cout << " is ";
	    if (entry.is_directory()) std::cout	<< "a directory\n";
	    if (entry.is_regular_file()) std::cout << "a regular file\n";
	    /*...*/
	}

	int main()
	{
	    std::filesystem::current_path(std::filesystem::temp_direc-
       tory_path());

	    std::filesystem::directory_entry	   entry{std::filesystem::cur-
       rent_path()};
	    print_entry_info(entry);

	    std::filesystem::path name{"cppreference.html"};
	    std::ofstream{name}	<< "C++";

	    std::cout << "entry.assign();\n";
	    entry.assign(entry/name);
	    print_entry_info(entry);

	    std::cout << "remove(entry);\n";
	    std::filesystem::remove(entry);
	    print_entry_info(entry); //	the entry still	contains old "state"

	    std::cout << "entry.assign();\n";
	    entry.assign(entry); // or just call entry.refresh()
	    print_entry_info(entry);
	}

Possible output:
	the entry "/tmp" is a directory
	entry.assign();
	the entry "/tmp/cppreference.html" is a	regular	file
	remove(entry);
	the entry "/tmp/cppreference.html" is a	regular	file
	entry.assign();
	the entry "/tmp/cppreference.html" does	not exists on the file system

See also
	  operator= assigns contents
		    (public member function)

http://cppreference.com		  2022.07.31	  std::filesy...try::assign(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::filesystem::directory_entry::assign&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help