最終更新日時: 2024年06月11日 22時45分38秒 (JST)
Akira Takahashi が更新

履歴 編集

enum
<filesystem>

# std::filesystem::file_type(C++17)

    namespace std::filesystem {
      enum class file_type {
        none,
        not_found,
        regular,
        directory,
        symlink,
        block,
        character,
        fifo,
        socket,
        implementation-defined,
        unknown
      };
    }

## 概要

ファイル種別を表す列挙型。

それぞれの列挙子の値は未規定だが、異なる値を持つ。

各列挙子は、以下の意味を持つ：

列挙子 | 説明
--- | ---
`none` | ファイル種別を判定できなかったか、判定を試みてエラーが発生した
`not_found` | ファイルが見つからなかったことを表す擬似的な種別
`regular` | 通常のファイル
`directory` | ディレクトリ・ファイル
`symlink` | シンボリックリンク・ファイル
`block` | ブロック・スペシャル・ファイル。ブロックデバイスとも呼ばれる
`character` | キャラクタ・スペシャル・ファイル。キャラクタデバイスとも呼ばれる
`fifo` | FIFOファイルもしくはパイプファイル
`socket` | ソケットファイル
implementation-defined | OSのファイルシステムがサポートする実装定義のファイル種別
`unknown` | ファイルは存在するが種別を決定できなかった

## 例

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

    namespace fs = std::filesystem;

    int main()
    {
      std::ofstream{"a.txt"};

      fs::file_status status = fs::status("a.txt");
      fs::file_type type = status.type();

      switch (type) {
        case fs::file_type::none:
          std::cout << "none" << std::endl;
          break;
        case fs::file_type::not_found:
          std::cout << "not found" << std::endl;
          break;
        case fs::file_type::regular:
          std::cout << "regular file" << std::endl;
          break;
        case fs::file_type::directory:
          std::cout << "directory file" << std::endl;
          break;
        case fs::file_type::symlink:
          std::cout << "symbolic link file" << std::endl;
          break;
        case fs::file_type::block:
          std::cout << "block special file" << std::endl;
          break;
        case fs::file_type::character:
          std::cout << "character special file" << std::endl;
          break;
        case fs::file_type::fifo:
          std::cout << "FIFO or pipe file" << std::endl;
          break;
        case fs::file_type::socket:
          std::cout << "socket file" << std::endl;
          break;
        case fs::file_type::unknown:
          std::cout << "unknown type file" << std::endl;
          break;
        default:
          std::cout << "implementation-defined file type" << std::endl;
          break;
      }
    }

### 出力

    regular file

## バージョン

### 言語

- C++17

### 処理系

- Clang: 7.0 ✅
- GCC: 8.1 ✅
- Visual C++:

## 参照

- LWG Issue 2851. `std::filesystem` enum classes are now underspecified