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

Posted

技术标签:

【中文标题】检测路径是绝对的还是相对的【英文标题】:Detect whether path is absolute or relative 【发布时间】:2011-07-19 15:46:22 【问题描述】:

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

【问题讨论】:

@AlexFarber:他的观点是,如果你尝试过,谷歌搜索就会把你带到正确的地方。 【参考方案1】:

Windows API 有PathIsRelative。定义为:

BOOL PathIsRelative(
  _In_  LPCTSTR lpszPath
);

【讨论】:

@LightnessRacesinOrbit:虽然它可以在 99% 的情况下工作,但它并不是一个完美的解决方案。这里有两个主要原因: 1. 从技术上讲,应该有三个返回选项:yesnoerror determining。 2.此限制:maximum length MAX_PATH。不幸的是,我没有找到可以可靠地执行此操作的 Windows API... 使用#include 【参考方案2】:

从 C++14/C++17 开始,您可以使用 filesystem library 中的 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 操作系统上是绝对路径,但在 POSIX 操作系统上是相对路径 窗户。

在 C++14 中使用 std::experimental::filesystem

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

std::experimental::filesystem::path path(winPathString); // Construct the path from a string.

【讨论】:

以上是关于检测路径是绝对的还是相对的的主要内容,如果未能解决你的问题,请参考以下文章

确定shell程序中的相对路径还是绝对路径

如何使用Python以跨平台方式检查路径是绝对路径还是相对路径?

SEO 和 301 重定向 - 它们可以有相对路径还是必须是绝对路径?

如何测试 URL 字符串是绝对的还是相对的?

file:///G:/image/bj.jpg是啥意思?这是相对路径还是绝对路径

绝对路径与相对路径问题