Namespaces
Variants

std::filesystem::path:: extension

From cppreference.net
path extension ( ) const ;
(C++17以降)

ジェネリック形式ビューのファイル名コンポーネントの拡張子を返します * this

もし filename() コンポーネントのジェネリック形式パスにピリオド( . )が含まれ、かつ特別なファイルシステム要素 dot または dot-dot でない場合、 extension は最も右側のピリオド(ピリオドを含む)からパス名の終わりまでの部分文字列となります。

ファイル名の最初の文字がピリオドの場合、そのピリオドは無視されます(".profile"のようなファイル名は拡張子として扱われません)。

パス名が . または .. である場合、あるいは filename() '.' 文字を含まない場合、空のパスが返されます。

実装によっては、ファイルシステムに対して拡張子に追加の要素(代替データストリームや区分データセット名など)を付加する動作が定義される場合があります。

目次

パラメータ

(なし)

戻り値

現在のパス名の拡張子、または拡張子がない場合は空のパス。

例外

実装定義の例外をスローする可能性があります。

注記

この関数が返す拡張子には、ピリオドで終わるファイル(関数が "." を返す)と拡張子のないファイル(関数が "" を返す)を区別できるように、ピリオドが含まれています。

POSIX以外のシステムでは、 p. stem ( ) + p. extension ( ) ! = p. filename ( ) となる可能性があります。たとえジェネリック形式のバージョンが同じであっても。

#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main()
{
    std::cout << fs::path("/foo/bar.txt").extension() << '\n'
              << fs::path("/foo/bar.").extension() << '\n'
              << fs::path("/foo/bar").extension() << '\n'
              << fs::path("/foo/bar.txt/bar.cc").extension() << '\n'
              << fs::path("/foo/bar.txt/bar.").extension() << '\n'
              << fs::path("/foo/bar.txt/bar").extension() << '\n'
              << fs::path("/foo/.").extension() << '\n'
              << fs::path("/foo/..").extension() << '\n'
              << fs::path("/foo/.hidden").extension() << '\n'
              << fs::path("/foo/..bar").extension() << '\n';
}

出力:

".txt"
"."
""
".cc"
"."
""
""
""
""
".bar"

関連項目

ファイル名パスコンポーネントを返す
(公開メンバ関数)
ステムパスコンポーネントを返す(最終拡張子を除いたファイル名)
(公開メンバ関数)
拡張子を置換する
(公開メンバ関数)
対応するパス要素が空でないかチェックする
(公開メンバ関数)