Spec-Zone.ru › C++

std::filesystem::path::replace_extension

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}; // columns' width

    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"

См. также

extension
возвращает компонент пути, содержащий расширение файла
(открытая функция-член)
filename
возвращает компонент пути, содержащий имя файла
(открытая функция-член)
stem
возвращает компонент пути stem (имя файла без последнего расширения)
(открытая функция-член)
has_extension
проверяет, что соответствующий элемент пути не пуст
(открытая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/filesystem/path/replace_extension

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API