检测path是绝对path还是相对path

使用C ++,我需要检测给定的path(文件名)是绝对的还是相对的。 我可以使用Windows API,但不想使用第三方库,如Boost,因为我需要在小型Windows应用程序中使用此解决scheme,而无需依赖于附属程序。

Windows API有PathIsRelative 。 它被定义为:

 BOOL PathIsRelative( _In_ LPCTSTR lpszPath ); 

从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. 

我有提升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". }