Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::filesystem::equivalent

      From cppreference.com
      <cpp‎ |filesystem
       
       
      Filesystem library
      Classes
      Functions
      File types
       
      Defined in header<filesystem>
      bool equivalent(conststd::filesystem::path& p1,
                       conststd::filesystem::path& p2);
      (1)(since C++17)
      bool equivalent(conststd::filesystem::path& p1,

                       conststd::filesystem::path& p2,

                       std::error_code& ec)noexcept;
      (2)(since C++17)

      Checks whether the pathsp1 andp2 resolve to the same file system entity.

      If eitherp1 orp2 does not exist, an error is reported.

      The non-throwing overload returnsfalse on errors.

      Contents

      [edit]Parameters

      p1, p2 - paths to check for equivalence
      ec - out-parameter for error reporting in the non-throwing overload

      [edit]Return value

      true if thep1 andp2 refer to the same file or directory and their file status is the same.false otherwise.

      [edit]Exceptions

      Any overload not markednoexcept may throwstd::bad_alloc if memory allocation fails.

      1) Throwsstd::filesystem::filesystem_error on underlying OS API errors, constructed withp1 as the first path argument,p2 as the second path argument, and the OS error code as the error code argument.
      2) Sets astd::error_code& parameter to the OS API error code if an OS API call fails, and executesec.clear() if no errors occur.

      [edit]Notes

      Two paths are considered to resolve to the same file system entity if the two candidate entities the paths resolve to are located on the same device at the same location. For POSIX, this means that thest_dev andst_ino members of their POSIXstat structure, obtained as if by POSIXstat(), are equal.

      In particular, all hard links for the same file or directory are equivalent, and a symlink and its target on the same file system are equivalent.

      [edit]Example

      Run this code
      #include <cstdint>#include <filesystem>#include <iostream>namespace fs= std::filesystem; int main(){// hard link equivalency    fs::path p1=".";    fs::path p2= fs::current_path();if(fs::equivalent(p1, p2))std::cout<< p1<<" is equivalent to "<< p2<<'\n'; // symlink equivalencyfor(const fs::path lib:{"/lib/libc.so.6","/lib/x86_64-linux-gnu/libc.so.6"}){try{            p2= lib.parent_path()/ fs::read_symlink(lib);}catch(std::filesystem::filesystem_errorconst& ex){std::cout<< ex.what()<<'\n';continue;} if(fs::equivalent(lib, p2))std::cout<< lib<<" is equivalent to "<< p2<<'\n';}}

      Possible output:

      "." is equivalent to "/var/tmp/test"filesystem error: read_symlink: No such file or directory [/lib/libc.so.6]"/lib/x86_64-linux-gnu/libc.so.6" is equivalent to "/lib/x86_64-linux-gnu/libc-2.23.so"

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 2937C++17error condition specified incorrectlycorrected

      [edit]See also

      compares the lexical representations of two paths lexicographically
      (public member function ofstd::filesystem::path)[edit]
      (C++17)(C++17)(until C++20)(C++17)(until C++20)(C++17)(until C++20)(C++17)(until C++20)(C++17)(until C++20)(C++20)
      lexicographically compares two paths
      (function)[edit]
      (C++17)(C++17)
      determines file attributes
      determines file attributes, checking the symlink target
      (function)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/filesystem/equivalent&oldid=158508"

      [8]ページ先頭

      ©2009-2025 Movatter.jp