0

0

c++中如何判断路径是绝对路径还是相对路径_c++ filesystem用法【详解】

穿越時空

穿越時空

发布时间:2026-01-21 17:42:36

|

551人浏览过

|

来源于php中文网

原创

使用 std::filesystem::path::is_absolute() 可直接判断路径是否绝对,它纯字符串解析、不依赖工作目录,已正确处理 Windows 盘符、UNC 路径及 NT 命名空间路径。

c++中如何判断路径是绝对路径还是相对路径_c++ filesystem用法【详解】

判断 std::filesystem::path 是否为绝对路径

在 C++17 的 中,直接用 is_absolute() 成员函数即可判断。它不依赖当前工作目录,也不做实际文件系统访问,纯路径字符串解析

注意:Windows 下路径是否绝对,不仅看是否以 /\ 开头,还要看是否有盘符或网络前缀(如 C:\\\server\share)。is_absolute() 已正确处理这些情况。

  • std::filesystem::path{"/home/user"}.is_absolute()true(Linux/macOS)
  • std::filesystem::path{"C:\\temp"}.is_absolute()true(Windows)
  • std::filesystem::path{"./data.txt"}.is_absolute()false
  • std::filesystem::path{"data.txt"}.is_absolute()false

相对路径的常见表现与误判点

相对路径不一定带 ... —— 单个文件名(如 "config.json")或子目录名(如 "logs/error.log")也属于相对路径。容易误以为“没斜杠就是相对”,但其实关键在于是否满足 is_absolute() 的定义。

Windows 下尤其容易踩坑:

立即学习C++免费学习笔记(深入)”;

音疯
音疯

音疯是昆仑万维推出的一个AI音乐创作平台,每日可以免费生成6首歌曲。

下载
  • std::filesystem::path{"temp\\"}.is_absolute()false(结尾反斜杠不影响判断逻辑)
  • std::filesystem::path{"\\temp"}.is_absolute()false(单个 \ 开头 ≠ 绝对路径;需是 \\serverC:\ 才行)
  • std::filesystem::path{R"(\\?\C:\path)"} 这类 NT 命名空间路径,is_absolute() 仍返回 true标准库已支持)

结合 std::filesystem::weakly_canonical() 的实际用途

仅靠 is_absolute() 不足以知道路径最终指向哪里。如果想把相对路径转成绝对路径用于后续操作(比如打开文件),应先用 std::filesystem::absolute()weakly_canonical() 归一化。

absolute() 简单拼接当前工作目录,适合确定路径存在或可预期的场景;weakly_canonical() 会尝试解析 .. 并跳过不存在的中间组件,更健壮但稍慢。

std::filesystem::path p = "data/../conf/app.ini";
if (!p.is_absolute()) {
    p = std::filesystem::absolute(p); // → /current/working/dir/conf/app.ini
}

跨平台开发时的路径分隔符陷阱

std::filesystem::path 内部统一用 / 存储,构造时自动转换 Windows 的 \。但判断绝对性时,原始字符串形式仍有影响:

  • std::filesystem::path{"C:/temp"}.is_absolute()true
  • std::filesystem::path{"C:/temp"}.string() 在 Windows 上仍返回 "C:/temp"(不是 "C:\\temp"
  • 若手动拼接路径字符串再传给 path 构造函数,务必避免混用 /\ —— 虽然多数情况能容错,但 "C:\temp/file.txt" 中的 \t 会被当转义符解析,导致意外结果

建议始终使用 std::filesystem::path 的运算符(如 /)拼接,而不是字符串拼接。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

415

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

533

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

310

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

75

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

338

2023.08.02

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1468

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

229

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

85

2025.10.17

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

9

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.5万人学习

Git 教程
Git 教程

共21课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号