Namespaces
Variants
Views
Actions

std::filesystem::path::replace_extension

From cppreference.com
< cpp‎ | filesystem‎ | path
 
 
 
 
path& replace_extension( const path& replacement = path() );
(since C++17)

Replaces the extension with replacement or removes it when the default value of replacement is used.

Firstly, if this path has an extension(), it is removed from the generic-format view of the pathname.

Then, a dot character is appended to the generic-format view of the pathname, if replacement is not empty and does not begin with a dot character.

Then replacement is appended as if by operator+=(replacement).

Contents

[edit] Parameters

replacement - the extension to replace with

[edit] Return value

*this

[edit] Exceptions

May throw implementation-defined exceptions.

[edit] Notes

The type of replacement is std::filesystem::path even though it is not intended to represent an object on the file system in order to correctly account for the filesystem character encoding.

[edit] Example

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

Output:

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"

[edit] See also

returns the file extension path component
(public member function) [edit]
returns the filename path component
(public member function) [edit]
returns the stem path component (filename without the final extension)
(public member function) [edit]
checks if the corresponding path element is not empty
(public member function)