filesystem
パス、ファイル、ディレクトリに関する情報の操作や取得を行うクラスと関数にアクセスするには、ヘッダー <filesystem>
をインクルードします。
構文
#include <filesystem> // C++17 standard header file name
#include <experimental/filesystem> // Header file for pre-standard implementation
using namespace std::experimental::filesystem::v1;
重要
Visual Studio 2017 のリリースでは、<filesystem>
ヘッダーはまだ C++ 標準ではありませんでした。 Visual Studio 2017 RTW の C++ は、ISO/IEC JTC 1/SC 22/WG 21 N4100 の標準の最終ドラフトを実装しています。 Visual Studio 2017 バージョン 15.7 以降では、新しい C++17 <filesystem>
標準がサポートされています。
これは、以前の std::experimental
バージョンと互換性のない、完全に新しい実装です。 これは、symlink サポート、バグ修正、標準で必要な動作の変更で必要となりました。 Visual Studio 2019 バージョン 16.3 以降では、<filesystem>
を含め、新しい std::filesystem
のみを提供します。 <experimental/filesystem>
を含めて、前の experimental の実装のみを提供します。 この experimental 実装は、ライブラリの次の ABI の重大なリリースで削除されます。
このヘッダーは、ホスト オペレーティング システム (Microsoft Windows と POSIX) の 2 つの広範なクラスのいずれかに対してファイル システムをサポートします。
ほとんどの機能が両方のオペレーティング システムに共通していますが、このドキュメントではそれらの相違点について説明します。 次に例を示します。
Windows は、
c:
や\\network_name
などの複数のルート名をサポートします。 ファイル システムはツリーのフォレストで構成され、それぞれのツリーが持つc:\
や\\network_name\
などの独自のルート ディレクトリと現在のディレクトリから相対パス名 (絶対パス名ではないもの) が生成されます。POSIX は、ルート名のない単一のツリー、単一のルート ディレクトリ
/
、単一の現在のディレクトリをサポートします。
もう 1 つの大きな違いは、パス名のネイティブな表現です。
Windows は、UTF-16 (文字ごとに 1 つ以上の要素) としてエンコードされた、null で終わる
wchar_t
のシーケンスを使用します。POSIX は、UTF-8 (文字ごとに 1 つ以上の要素) としてエンコードされた、null で終わる
char
のシーケンスを使用します。クラス
path
のオブジェクトは、パス名をネイティブ形式で格納しますが、この格納形式といくつかの外部形式の間の簡単な変換をサポートします。オペレーティング システムで優先されるようにエンコードされた
char
の null 終端シーケンス。UTF-8 としてエンコードされた
char
の null 終端シーケンス。オペレーティング システムで優先されるようにエンコードされた
wchar_t
の null 終端シーケンス。UTF-16 としてエンコードされた
char16_t
の null 終端シーケンス。UTF-32 としてエンコードされた
char32_t
の null 終端シーケンス。
必要に応じて、1 つまたは複数の
codecvt
ファセットを使用することによって、これらの表現の相互変換が実施されます。 特定のロケール オブジェクトが指定されなかった場合は、これらのファセットがグローバル ロケールから取得されます。
もう 1 つの相違点は、オペレーティング システムで指定可能なファイルまたはディレクトリのアクセス許可の詳細です。
Windows は、ファイルが読み取り専用なのか書き込み可能なのかという、ディレクトリには意味のない属性を記録します。
POSIX は、ファイルを読み取り、書き込み、または実行できるかどうかを記録します (ディレクトリの場合はスキャンされます)。 また、所有者、所有者のグループ、またはすべてのユーザーに対して各操作が許可されるかどうかに加えて、他のいくつかのアクセス許可も記録されます。
両方のシステムに共通しているのは、ルート名に到達するまでのパス名に適用される構造です。 pathname の場合 c:/abc/xyz/def.ext
:
ルート名は
c:
です。ルート ディレクトリは
/
です。ルート パスは
c:/
です。相対パスは
abc/xyz/def.ext
です。親パスは
c:/abc/xyz
です。ファイル名が
def.ext
です。ステムは
def
です。拡張機能は
.ext
です。
小さな相違点は、パス名内のディレクトリのシーケンスの優先区切り記号です。 両方のオペレーティング システムでスラッシュ /
を記述できますが、一部のコンテキストでは、Windows で円記号 \
が優先されます。 実装では、path
のデータ メンバー preferred_separator
に優先区切り記号が格納されます。
最後に、path
オブジェクトの重要な特徴として、ヘッダー <fstream>
で定義されたクラスで filename 引数が必要な場合はこれらのオブジェクトを使用することができます。
詳細とコード例については、ファイル システムのナビゲーション (C++) に関する記事を参照してください。
メンバー
クラス
名前 | 説明 |
---|---|
directory_entry クラス |
directory_iterator または recursive_directory_iterator で返されるオブジェクトを記述します。また、path が含まれます。 |
directory_iterator クラス |
ファイル システム ディレクトリのファイル名をシーケンス処理する入力反復子を表します。 |
filesystem_error クラス |
低レベル システム オーバーフローをレポートするためにスローされる例外のための基底クラス。 |
path クラス |
ファイル名として使用するのに適したテンプレート型 String のオブジェクトを格納するクラスを定義します。 |
recursive_directory_iterator クラス |
ファイル システム ディレクトリのファイル名をシーケンス処理する入力反復子を表します。 反復子はサブディレクトリに下りることもできます。 |
file_status クラス |
file_type をラップします。 |
構造
名前 | 説明 |
---|---|
space_info 構造体 |
ボリュームに関する情報を保持します。 |
関数
<filesystem>
関数
演算子
列挙型
名前 | 説明 |
---|---|
copy_options |
copy_file と共に使用され、コピー先ファイルが既に存在する場合の動作を決定する列挙体です。 |
directory_options |
ディレクトリ反復子のオプションを指定する列挙体。 |
file_type |
ファイルの種類の列挙型。 |
perm_options |
permissions 関数のオプションを列挙します。 |
perms |
アクセス許可とアクセス許可に対するオプションを伝達するために使用されるビットマスク型 |