<filesystem>

現在のコードでは、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> 関数

演算子

<filesystem> 演算子

列挙型

名前 説明
copy_options copy_file と共に使用され、コピー先ファイルが既に存在する場合の動作を決定する列挙体です。
directory_options ディレクトリ反復子のオプションを指定する列挙体。
file_type ファイルの種類の列挙型。
perm_options permissions 関数のオプションを列挙します。
perms アクセス許可とアクセス許可に対するオプションを伝達するために使用されるビットマスク型

関連項目

ヘッダー ファイル リファレンス