You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用std::filesystem remove_filename()后路径为空:Bug还是特性?

问题分析:fs::path::remove_filename()返回空字符串的原因

这不是C++标准库的Bug,是你代码中的字符串转义错误导致的问题。

核心原因

你定义路径字符串时使用了单个反斜杠:

std::string fpath = ".\png\DUMMY-AB-42-L.PNG";

在C++中,反斜杠\是转义字符,必须用双反斜杠\\才能表示实际路径中的反斜杠。你写的\p和\D属于未定义的转义序列,编译器的处理行为是实现定义的——它不会按照你预期的方式保留\字符,而是会错误解析这些序列,最终导致fs::path无法识别路径里的目录结构,把整个字符串当成了一个独立的文件名。

当调用remove_filename()时,因为路径被解析为没有目录前缀的单个文件名,移除后自然返回空字符串。

修复方案

有两种方式修正路径字符串:

  • 使用双反斜杠转义:
    std::string fpath = ".\\png\\DUMMY-AB-42-L.PNG";
    
  • 使用C++11及以上支持的原始字符串字面量,无需转义反斜杠:
    std::string fpath = R"(.\png\DUMMY-AB-42-L.PNG)";
    

验证结果

修改后,程序输出会符合预期:

Hello World!
fpath:=.\png\DUMMY-AB-42-L.PNG
fs_fpath_str:=.\png\DUMMY-AB-42-L.PNG
fs_fpath_str:=.\png

内容的提问来源于stack exchange,提问作者schnedan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 09:26:14