检测路径是绝对的还是相对的
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. 从技术上讲,应该有三个返回选项:yes
、no
和error determining
。 2.此限制:maximum length MAX_PATH
。不幸的是,我没有找到可以可靠地执行此操作的 Windows API...
使用#include 从 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.
【讨论】:
以上是关于检测路径是绝对的还是相对的的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Python以跨平台方式检查路径是绝对路径还是相对路径?
SEO 和 301 重定向 - 它们可以有相对路径还是必须是绝对路径?