使用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". }