Метод replace_filename
Метод replace_filename класса path заменяет
имя файла в пути на новое значение. Метод возвращает
измененный объект path. В первый параметр мы передаем
новое имя файла (или путь), которое следует установить
вместо текущего имени. Исходный объект при этом не изменяется.
Важно понимать, что метод заменяет именно последний компонент пути - имя файла. Если путь заканчивается на разделитель, то имя файла считается пустым, и метод просто дописывает новое имя к пути.
Синтаксис
path.replace_filename(new_filename)
Пример
Давайте заменим имя файла в пути "/var/www/index.html"
на "style.css":
#include <iostream>
#include <filesystem>
using namespace std;
namespace fs = std::filesystem;
int main()
{
fs::path p = "/var/www/index.html";
fs::path res = p.replace_filename("style.css");
cout << res << endl;
return 0;
}
Результат выполнения кода:
"/var/www/style.css"
Пример
Давайте заменим имя файла на путь, содержащий подкаталог. В этом случае имя файла заменится на указанную строку:
#include <iostream>
#include <filesystem>
using namespace std;
namespace fs = std::filesystem;
int main()
{
fs::path p = "/var/www/index.html";
fs::path res = p.replace_filename("css/style.css");
cout << res << endl;
return 0;
}
Результат выполнения кода:
"/var/www/css/style.css"
Пример
Давайте посмотрим, как метод работает с относительным путем
и как меняется исходный объект. Исходный объект p
остается неизменным, так как метод возвращает новую копию:
#include <iostream>
#include <filesystem>
using namespace std;
namespace fs = std::filesystem;
int main()
{
fs::path p = "abcde/index.html";
fs::path res = p.replace_filename("12345.txt");
cout << "res: " << res << endl;
cout << "p: " << p << endl;
return 0;
}
Результат выполнения кода:
"res: abcde/12345.txt"
"p: abcde/index.html"
Смотрите также
-
метод
filename,
который возвращает имя файла из пути -
метод
replace_extension,
который заменяет расширение файла в пути -
метод
remove_filename,
который удаляет имя файла из пути -
метод
stem,
который возвращает имя файла без расширения