path& replace_extension(const path& replacement = path());
概要
パスに含まれる拡張子を置き換える。
この関数は、ファイルシステム上のファイル名は変更しない。そのようなことをする場合は、std::filesystem::rename()
関数を使用すること。
効果
- 現在のパスから拡張子を削除する
replacement
が空の場合は、それ以上の処理はしないreplacement
が"."
(ドット) で始まらない場合は、先頭に"."
を付加してoperator+=
で拡張子文字列を加算する
戻り値
*this
例
POSIXベースシステムでの例
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
fs::path p1 = "/foo.txt";
p1.replace_extension(".md");
std::cout << "p1 : " << p1 << std::endl;
fs::path p2 = "/foo.txt";
p2.replace_extension("md"); // ドットなしで拡張子を指定しても、ドットが付加される
std::cout << "p2 : " << p2 << std::endl;
fs::path p3 = "/foo"; // 拡張子がないファイル名に拡張子を付加する
p3.replace_extension(".md");
std::cout << "p3 : " << p3 << std::endl;
}
出力
p1 : "/foo.md"
p2 : "/foo.md"
p3 : "/foo.md"
バージョン
言語
- C++17
処理系
- Clang:
- GCC: 8.1 ✅
- Visual C++: 2017 Update 7 ✅