最終更新日時: 2022年02月17日 03時53分41秒 (JST)
Hiroki KUMAZAKI が更新

履歴 編集

<filesystem>

# filesystem(C++17)

`<filesystem>`ヘッダは、OSのファイルシステムを操作するAPIを提供する。

このライブラリでは、ファイル、ディレクトリ、シンボリックリンクなどを操作する。また、それらを総称してエンティティと呼ぶ。

このヘッダでは、以下の標準ヘッダをインクルードする：

- `<compare>` (C++20)

## パス

名前 | 説明 | 対応バージョン
--- | --- | ---
`path` | ファイルシステムのパスを扱うクラス (class) | C++17
`filesystem_error` | ファイルシステム操作で起きたエラーを表す例外クラス (class) | C++17
`directory_entry` | ディレクトリ内の要素を表すクラス (class) | C++17
`directory_iterator` | ディレクトリ内を走査するイテレータクラス (class) | C++17
`recursive_directory_iterator` | ディレクトリ内を再帰的に走査するイテレータクラス (class) | C++17

## ファイルシステム情報

名前 | 説明 | 対応バージョン
--- | --- | ---
`file_status` | ファイル状態を表すクラス (class) | C++17
`space_info` | 指定されたパスの容量を表すクラス (class) | C++17
`file_type` | ファイル種別を表す列挙型 (enum) | C++17
`perms` | 権限を表す列挙型 (enum) | C++17
`perm_options` | 権限オプションを表す列挙型 (enum) | C++17
`copy_options` | コピーオプションを表す列挙型 (enum) | C++17
`directory_options` | ディレクトリオプションを表す列挙型 (enum) | C++17
`file_time_type` | ファイル情報で使用する時間の型 (type alias) | C++17

## ファイルシステム操作

### パス操作

名前 | 説明 | 対応バージョン
--- | --- | ---
`current_path` | 現在の作業ディレクトリを取得・設定する (function) | C++17
`temp_directory_path` | 一時ファイル用ディレクトリのパスを取得する (function) | C++17
`absolute` | パスを絶対パスに変換する (function) | C++17
`canonical` | パスを正規化する (function) | C++17
`weakly_canonical` | `canonical`よりも弱い要件でパスを正規化する (function) | C++17
`read_symlink` | シンボリックリンクが指すパスを取得する (function) | C++17
`relative` | パスを現在の作業ディレクトリからの相対パスに変換する (function) | C++17
`proximate` | パスを現在の作業ディレクトリからの相対パスに変換する (function) | C++17

### エンティティ操作

名前 | 説明 | 対応バージョン
--- | --- | ---
`copy` | コピーする (function) | C++17
`copy_file` | ファイルをコピーする (function) | C++17
`copy_symlink` | シンボリックリンクをコピーする (function) | C++17
`create_directory` | ディレクトリを作成する (function) | C++17
`create_directories` | ディレクトリ階層を作成する (function) | C++17
`create_directory_symlink` | ディレクトリに対するシンボリックリンクを作成する (function) | C++17
`create_hard_link` | ハードリンクを作成する (function) | C++17
`create_symlink` | シンボリックリンクを作成する (function) | C++17
`permissions` | 権限を設定する (function) | C++17
`remove` | ファイル・ディレクトリを削除する (function) | C++17
`remove_all` | 再帰的にファイル・ディレクトリを削除する (function) | C++17
`rename` | ファイル・ディレクトリを名称変更・移動する (function) | C++17
`resize_file` | ファイルサイズを変更する (function) | C++17

### エンティティ情報

名前 | 説明 | 対応バージョン
--- | --- | ---
`exists` | ファイルが存在するか確認する (function) | C++17
`equivalent` | 2つのエンティティが等価かを確認する (function) | C++17
`file_size` | ファイルサイズを取得する (function) | C++17
`hard_link_count` | ハードリンク数を取得する (function) | C++17
`is_regular_file` | 指定されたパスが通常ファイルを指しているかを確認する (function) | C++17
`is_directory` | 指定されたパスがディレクトリを指しているかを確認する (function) | C++17
`is_symlink` | 指定されたパスがシンボリックリンクを指しているかを確認する (function) | C++17
`is_block_file` | 指定されたパスがブロックデバイスのスペシャルファイルを指しているかを確認する (function) | C++17
`is_character_file` | 指定されたパスがキャラクタデバイスのスペシャルファイルを指しているかを確認する (function) | C++17
`is_fifo` | 指定されたパスがFIFOもしくはパイプを指しているかを確認する (function) | C++17
`is_socket` | 指定されたパスがソケットを指しているかを確認する (function) | C++17
`is_other` | 指定されたパスが存在していない、もしくはシステム依存の種別のファイルを指しているかを確認する (function) | C++17
`is_empty` | 指定されたパスが空のファイル・ディレクトリかを確認する (function) | C++17
`last_write_time` | エンティティの最終更新日を取得・更新する (function) | C++17
`space` | 指定されたパスの残り容量を取得する (function) | C++17
`status` | ファイル状態を取得する (function) | C++17
`symlink_status` | シンボリックリンクの状態を取得する (function) | C++17
`status_known` | ファイルが既知の状態かを確認する (function) | C++17

## バージョン

### 言語

- C++17

### 備考

- いくつかの処理系バージョンでは、ファイルシステムライブラリを別途リンクする必要がある
  - GCC 8.1では、リンクオプションとして`-lstdc++fs`が必要
  - Clang 7.0では、リンクオプションとして`-lc++fs`が必要

## 参照

- P0218R1 Adopt the File System TS for C++17
- P0219R1 Relative Paths for Filesystem
- P0492R2 Proposed Resolution of C++17 National Body Comments for Filesystems(R2)
- P2051R0 C++ Standard Library Issues to be moved in Prague