Определить, является ли путь абсолютным или относительным - PullRequest
14 голосов
/ 21 марта 2011

Используя C ++, мне нужно определить, является ли данный путь (имя файла) абсолютным или относительным.Я могу использовать Windows API, но не хочу использовать сторонние библиотеки, такие как Boost, поскольку мне нужно это решение в небольших приложениях Windows без экспериментальных зависимостей.

Ответы [ 3 ]

20 голосов
/ 21 марта 2011

Windows API имеет PathIsRelative. Он определяется как:

BOOL PathIsRelative(
  _In_  LPCTSTR lpszPath
);
4 голосов
/ 07 апреля 2017

Начиная с C ++ 14 / C ++ 17, вы можете использовать is_absolute() и is_relative() из библиотеки файловой системы

#include <filesystem> // C++17 (or Microsoft-specific implementation in C++14)

std::string winPathString = "C:/tmp";
std::filesystem::path path(winPathString); // Construct the path from a string.
if (path.is_absolute()) {
    // Arriving here if winPathString = "C:/tmp".
}
if (path.is_relative()) {
    // Arriving here if winPathString = "".
    // Arriving here if winPathString = "tmp".
    // Arriving here in windows if winPathString = "/tmp". (see quote below)
}

Путь "/" является абсолютным в ОС POSIX, но относительным в Windows.

В C ++ 14 используется std::experimental::filesystem

#include <experimental/filesystem> // C++14

std::experimental::filesystem::path path(winPathString); // Construct the path from a string.
0 голосов
/ 19 октября 2017

У меня буст 1.63 и VS2010 (c ++ pre c ++ 11), и работает следующий код.

std::filesystem::path path(winPathString); // Construct the path from a string.
if (path.is_absolute()) {
    // Arriving here if winPathString = "C:/tmp".
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...