現在のコードでは、C++17 標準ヘッダー <filesystem> を含め、パス、ファイル、ディレクトリに関する情報を操作および取得するクラスと関数に std::filesystem 名前空間を使用します。
/std:c++17 以降でコンパイルします。
構文
#include <filesystem> // C++17 standard header file name
using namespace std::filesystem;
Note
履歴メモ: C++17 で標準化された <filesystem>より前のバージョンでは、MSVC ビルド ツール バージョン 14.51 以降で削除された、 <experimental/filesystem> ヘッダーに個別の事前標準実装が付属していました。 ドキュメントについては、 <experimental/filesystem>を参照してください。
<filesystem> ヘッダーは、Microsoft Windowsおよび POSIX のファイル システムをサポートします。
ほとんどの機能が両方のオペレーティング システムに共通していますが、このドキュメントではそれらの相違点について説明します。 次に例を示します。
- 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 で円記号 \ が優先されます。 実装では、preferred_separator のデータ メンバー path に優先区切り記号が格納されます。
最後に、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 構造体 |
ボリュームに関する情報を保持します。 |
Functions
<filesystem>
関数
演算子
列挙型
| 名前 | 説明 |
|---|---|
copy_options |
copy_file と共に使用され、コピー先ファイルが既に存在する場合の動作を決定する列挙体です。 |
directory_options |
ディレクトリ反復子のオプションを指定する列挙体。 |
file_type |
ファイルの種類の列挙型。 |
perm_options |
permissions 関数のオプションを列挙します。 |
perms |
アクセス許可とアクセス許可に対するオプションを伝達するために使用されるビットマスク型 |