Класс path
Класс path из заголовочного файла <filesystem>
представляет собой путь к файлу или директории в файловой
системе. Он хранит путь в виде строки в собственном внутреннем
формате и предоставляет методы для извлечения отдельных
компонентов пути, таких как имя файла, расширение, родительская
директория и других. Класс path автоматически
обрабатывает разделители пути в зависимости от операционной
системы, что делает код переносимым между платформами.
Объект path можно создать из строки, строки в стиле C
или другого объекта path. В первый параметр конструктора
мы передаем строку с путем, а второй параметр (необязательный)
задает формат представления пути.
Синтаксис
#include <filesystem>
namespace fs = std::filesystem;
fs::path p("path/to/file");
fs::path p = "path/to/file";
Пример
Давайте создадим объект path и выведем его на экран:
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
using namespace std;
int main()
{
fs::path p = "/var/www/index.html";
cout << p << endl;
return 0;
}
Результат выполнения кода:
"/var/www/index.html"
Пример
Давайте извлечем отдельные компоненты пути с помощью методов
filename, stem и extension:
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
using namespace std;
int main()
{
fs::path p = "/var/www/index.html";
cout << "filename: " << p.filename() << endl;
cout << "stem: " << p.stem() << endl;
cout << "extension: " << p.extension() << endl;
cout << "parent: " << p.parent_path() << endl;
return 0;
}
Результат выполнения кода:
"filename: index.html"
"stem: index"
"extension: .html"
"parent: /var/www"
Пример
Давайте объединим два пути с помощью оператора /:
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
using namespace std;
int main()
{
fs::path dir = "/var/www";
fs::path file = "index.html";
fs::path full = dir / file;
cout << full << endl;
return 0;
}
Результат выполнения кода:
"/var/www/index.html"
Пример
Давайте проверим, является ли путь абсолютным или относительным
с помощью методов is_absolute и is_relative:
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
using namespace std;
int main()
{
fs::path abs = "/var/www/index.html";
fs::path rel = "index.html";
cout << boolalpha;
cout << "abs is_absolute: " << abs.is_absolute() << endl;
cout << "rel is_relative: " << rel.is_relative() << endl;
return 0;
}
Результат выполнения кода:
"abs is_absolute: true"
"rel is_relative: true"
Смотрите также
-
метод
filename,
который возвращает имя файла из пути -
метод
extension,
который возвращает расширение файла -
метод
parent_path,
который возвращает родительскую директорию -
метод
operator/,
который объединяет два пути