Namespaces
Variants

std::filesystem::path:: replace_extension

From cppreference.net
path & replace_extension ( const path & replacement = path ( ) ) ;
(C++17以降)

拡張子を replacement で置き換えるか、 replacement のデフォルト値が使用された場合は削除します。

まず、このパスに extension() が存在する場合、パス名のジェネリック形式ビューから削除されます。

次に、パス名のジェネリック形式ビューにドット文字が追加されます。ただし、 replacement が空でなく、かつドット文字で始まらない場合に限ります。

その後 replacement operator + = ( replacement ) によって追加されます。

目次

パラメータ

replacement - 置き換える拡張子

戻り値

* this

例外

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

注記

replacement の型は、ファイルシステム上のオブジェクトを表現することを意図していないにもかかわらず、ファイルシステムの文字エンコーディングを正しく考慮するために std::filesystem::path となっています。

#include <filesystem>
#include <iomanip>
#include <iostream>
#include <utility>
int main()
{
    const int width1{18}, width2{11}; // 列の幅
    std::cout << std::left << std::setw(width1) << "Path:"
              << std::setw(width2) << "Ext:" << "Result:\n";
    for (const auto& [p, e] : {
            std::make_pair("/foo/bar.jpg", ".png"),
            {"/foo/bar.jpg", "png"},
            {"/foo/bar.jpg", "."},
            {"/foo/bar.jpg", ""},
            {"/foo/bar.", "png"},
            {"/foo/bar", ".png"},
            {"/foo/bar", "png"},
            {"/foo/bar", "."},
            {"/foo/bar", ""},
            {"/foo/.", ".png"},
            {"/foo/.", "png"},
            {"/foo/.", "."},
            {"/foo/.", ""},
            {"/foo/", ".png"},
            {"/foo/", "png"}})
    {
        std::filesystem::path path{p}, ext{e};
        std::cout << std::setw(width1) << path << std::setw(width2) << ext;
        path.replace_extension(ext);
        std::cout << path << '\n';
    }
}

出力:

Path:             Ext:       Result:
"/foo/bar.jpg"    ".png"     "/foo/bar.png"
"/foo/bar.jpg"    "png"      "/foo/bar.png"
"/foo/bar.jpg"    "."        "/foo/bar."
"/foo/bar.jpg"    ""         "/foo/bar"
"/foo/bar."       "png"      "/foo/bar.png"
"/foo/bar"        ".png"     "/foo/bar.png"
"/foo/bar"        "png"      "/foo/bar.png"
"/foo/bar"        "."        "/foo/bar."
"/foo/bar"        ""         "/foo/bar"
"/foo/."          ".png"     "/foo/..png"
"/foo/."          "png"      "/foo/..png"
"/foo/."          "."        "/foo/.."
"/foo/."          ""         "/foo/."
"/foo/"           ".png"     "/foo/.png"
"/foo/"           "png"      "/foo/.png"

関連項目

ファイル拡張子パスコンポーネントを返す
(public member function)
ファイル名パスコンポーネントを返す
(public member function)
ステムパスコンポーネントを返す(最終拡張子を除いたファイル名)
(public member function)
対応するパス要素が空でないかチェックする
(public member function)