检测路径是绝对路径还是相对路径

时间:2011-03-21 12:34:07

标签: c++ windows visual-c++ path

使用C ++,我需要检测给定路径(文件名)是绝对路径还是相对路径。我可以使用Windows API,但不想使用像Boost这样的第三方库,因为我需要在没有经验依赖性的小型Windows应用程序中使用此解决方案。

3 个答案:

答案 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".
}