https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101510

--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Madhu from comment #0)
> cppreference.com states
> 
> ```   
> bool create_directory( const std::filesystem::path& p );
> 
> Creates the directory p as if by POSIX mkdir() with a second argument of
> static_cast<int>(std::filesystem::perms::all) (the parent directory must
> already exist). If the function fails because p resolves to an existing
> directory, no error is reported. Otherwise on failure an error is reported.
> ```
> 
> This should accomodate situations when `p' resolves to an existing directory
> when `p' it is a symbolic link.
> 
> However create_directory(p) fails when p is a symbolic link which points
> to an existing directory.
> 
> The standard usage pattern is to call mkdir(p) - and if it fails on EEXIST
> to stat(2) p - following symlinks, and check if is a directory. The pattern
> is used to ensure that `p' can be treated as a directory for further
> operations and this includes p being a symbolic link to a directory)

You can do this with create_directory. If create_directory(p) doesn't throw an
exception, then is_directory(p) is true. Or without exceptions:

  std::error_code ec;
  create_directory(p, ec);
  if (!ec)
  {
    // p resolves to a directory
  }

Reply via email to