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

履歴 編集

function
<filesystem>

# std::filesystem::path::extension(C++17)

    path extension() const;

## 概要

パスが保持している拡張子を取得する。

- この関数によって拡張子のパスは、ドットを含む
- カレントディレクトリを表す「`"."` (ドット x 1)」および親ディレクトリを表す「`".."` (ドット x 2)」は拡張子なしで見なされ、空のパスが返される

## 戻り値

`filename()`で返されたファイル名について、`stem()`には含まれないサフィックス部分を返す。

## 例

### POSIXベースシステムでの例

    #include <iostream>
    #include <filesystem>

    namespace fs = std::filesystem;

    int main()
    {
      fs::path ps[] = {
        "/foo/bar.txt",    // ファイル名を含むパス
        "/foo/bar.tar.gz", // ファイル名に複数のドットが含まれるパス
        "/foo/",           // ディレクトリパス
        "/foo/.",          // カレントディレクトリ
        "..",              // 親ディレクトリ
        ".file",           // 隠しファイル (拡張子なし)
      };

      for (const fs::path& p : ps) {
        std::cout << p << " : " << p.extension() << std::endl;
      }
    }

#### 出力

    "/foo/bar.txt" : ".txt"
    "/foo/bar.tar.gz" : ".gz"
    "/foo/" : ""
    "/foo/." : ""
    ".." : ""
    ".file" : ""

### Windowsでの例

    #include <iostream>
    #include <filesystem>

    namespace fs = std::filesystem;

    int main()
    {
      fs::path ps[] = {
        "C:/foo/bar.txt",    // ファイル名を含むパス
        "C:/foo/bar.tar.gz", // ファイル名に複数のドットが含まれるパス
        "C:/foo/",           // ディレクトリパス
        "C:/foo/.",          // カレントディレクトリ
        "..",                // 親ディレクトリ
        ".file",             // UNIX系OSでの隠しファイル (拡張子なし)
      };

      for (const fs::path& p : ps) {
        std::cout << p << " : " << p.extension() << std::endl;
      }
    }

#### 出力

    "C:/foo/bar.txt" : ".txt"
    "C:/foo/bar.tar.gz" : ".gz"
    "C:/foo/" : ""
    "C:/foo/." : ""
    ".." : ""
    ".file" : ""

## バージョン

### 言語

- C++17

### 処理系

- Clang: 9.0 ✅
- GCC: 8.1 ✅
- Visual C++: 2017 Update 7 ✅