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

Linux环境下C++14如何从文件路径中提取父文件夹名称

C++14 Linux环境提取路径父文件夹名称实现

你已经定位到了文件名前的最后一个路径分隔符,只需要往前回溯找到上一个分隔符,截取两个分隔符中间的子串即可,注意处理路径末尾带斜杠、根目录文件、无层级相对路径这些边界场景。

完整实现代码

#include <string>

std::string getFolderName(const std::string &path) {
    if (path.empty()) {
        return "";
    }

    // 先清除路径末尾连续的分隔符,兼容路径末尾带/的输入
    size_t valid_end = path.find_last_not_of("/\\");
    if (valid_end == std::string::npos) {
        return "/";
    }
    std::string trim_path = path.substr(0, valid_end + 1);

    // 定位文件/当前目录前的最后一个分隔符
    size_t last_sep_pos = trim_path.find_last_of("/\\");
    if (last_sep_pos == std::string::npos) {
        return "";
    }
    if (last_sep_pos == 0) {
        return "/";
    }

    // 往前找上一级分隔符
    size_t prev_sep_pos = trim_path.find_last_of("/\\", last_sep_pos - 1);
    if (prev_sep_pos == std::string::npos) {
        return trim_path.substr(0, last_sep_pos);
    }

    return trim_path.substr(prev_sep_pos + 1, last_sep_pos - prev_sep_pos - 1);
}

测试验证

  • 输入示例路径 /home/abc/fi.mp4,返回结果为 abc,符合预期
  • 输入根目录文件路径 /test.txt,返回结果为 /
  • 输入相对路径 doc/note.pdf,返回结果为 doc
  • 输入末尾带斜杠的目录路径 /home/abc/,返回结果为 home(即abc目录的父文件夹名)
  • 输入多层级路径 /data/media/2024/01/demo.mov,返回结果为 01

补充说明

纯Linux环境下路径分隔符只有正斜杠/,可以把代码里匹配反斜杠\\的逻辑删掉,减少无意义的匹配判断。如果后续升级到C++17,可以直接用标准库std::filesystem::path的parent_path()接口实现,不需要手动写字符串处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:45:47