• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    function
    <filesystem>

    std::filesystem::directory_entry::symlink_status

    file_status symlink_status() const;                             // (1)
    file_status symlink_status(std::error_code& ec) const noexcept; // (2)
    

    概要

    シンボリックリンクのファイル状態を取得する。

    戻り値

    値がキャッシュされている場合は、それを返す。キャッシュされていない場合は、

    例外

    #include <iostream>
    #include <filesystem>
    #include <fstream>
    #include <string>
    
    namespace fs = std::filesystem;
    
    std::string file_type_to_string(fs::file_type type) {
      switch (type) {
        case fs::file_type::none:       return "none";
        case fs::file_type::not_found:  return "not found";
        case fs::file_type::regular:    return "regular file";
        case fs::file_type::directory:  return "directory file";
        case fs::file_type::symlink:    return "symbolic link file";
        case fs::file_type::block:      return "block special file";
        case fs::file_type::character:  return "character special file";
        case fs::file_type::fifo:       return "FIFO or pipe file";
        case fs::file_type::socket:     return "socket file";
        case fs::file_type::unknown:    return "unknown type file";
        default:
          return "implementation-defined file type";
      }
    }
    
    int main()
    {
      fs::create_directory("dir");
      fs::create_directory("dir/inner_dir");
      std::ofstream{"dir/a.txt"};
      fs::create_symlink("dir/a.txt", "dir/a.symlink");
    
      for (const fs::directory_entry& x : fs::directory_iterator("dir")) {
        fs::file_status st = x.symlink_status();
        std::cout << x.path() << " : " << file_type_to_string(st.type()) << std::endl;
      }
    }
    

    出力例

    "dir/a.symlink" : symbolic link file
    "dir/inner_dir" : directory file
    "dir/a.txt" : regular file
    

    バージョン

    言語

    • C++17

    処理系