使用C ++,我需要检测给定路径(文件名)是绝对路径还是相对路径。我可以使用Windows API,但不想使用像Boost这样的第三方库,因为我需要在没有经验依赖性的小型Windows应用程序中使用此解决方案。
答案 0 :(得分:20)
Windows API有PathIsRelative
。它被定义为:
BOOL PathIsRelative(
_In_ LPCTSTR lpszPath
);
答案 1 :(得分:4)
从C ++ 14 / C ++ 17开始,您可以使用is_absolute()
is_relative()
和filesystem library
#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 OS上是绝对的,但是是相对的 视窗。
在C ++ 14中使用std::experimental::filesystem
#include <experimental/filesystem> // C++14
std::experimental::filesystem::path path(winPathString); // Construct the path from a string.
答案 2 :(得分:0)
我提升了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".
}