当前位置: 首页 > news >正文

C++中获取文件名的后缀

在C++中获取文件名的后缀可以通过以下两种方法实现:

方法一:使用C++17的std::filesystem库(推荐)

#include <filesystem>
#include <string>

namespace fs = std::filesystem;

std::string getFileExtension(const std::string& filename) {
    fs::path p(filename);
    std::string ext = p.extension().string();
    // 移除扩展名前的点号(例如 ".txt" → "txt")
    if (!ext.empty() && ext[0] == '.') {
        return ext.substr(1);
    }
    return ext;
}

说明

  • 优点:自动处理路径和文件名,兼容不同操作系统。
  • 示例
    • file.txt"txt"
    • image.tar.gz"gz"
    • .bashrc""(无扩展名)
    • file.""

方法二:手动字符串处理(兼容旧版本)

#include <string>

std::string getFileExtensionManual(const std::string& filename) {
    // 提取纯文件名(去除路径)
    size_t path_pos = filename.find_last_of("/\\");
    std::string name_only = (path_pos == std::string::npos) ? filename : filename.substr(path_pos + 1);
    
    // 查找最后一个点号
    size_t dot_pos = name_only.find_last_of('.');
    if (dot_pos != std::string::npos && dot_pos + 1 < name_only.length()) {
        return name_only.substr(dot_pos + 1);
    }
    return "";
}

说明

  • 适用场景:无法使用C++17时,或处理纯文件名。
  • 示例
    • file.txt"txt"
    • archive.tar.gz"gz"
    • .hidden""(视为无扩展名)
    • file.""

关键点总结

  1. 路径处理:若输入可能包含路径,需先提取文件名部分。
  2. 边界条件
    • 文件名以点开头(如.bashrc)通常视为无扩展名。
    • 最后一个点号在末尾(如file.)返回空。
  3. 多后缀处理:如tar.gz,通常取最后一个点后的内容(gz)。

根据需求选择方法,优先使用标准库以获得更高的可靠性。

相关文章:

  • 深入探索 Python 中的 asyncio:异步编程的利器
  • es 3期 第27节-运用Script脚本实现复杂需求
  • 5500字,从零开始入门OpenCV的超基础操作~
  • Vue实现动态数据透视表(交叉表)
  • GCP(Google Cloud-native stack)的云原生技术栈介绍
  • Android之uCrop (裁剪) 的基本使用资料
  • 滑动窗口(1)—⻓度最⼩的⼦数组
  • 什么样的医疗器械进销存管理软件可以选择?
  • Channel Shuffle通道洗牌
  • ENSP学习day11
  • Angular由一个bug说起之十五:自定义基于Overlay的Tooltip
  • 未来AI视觉艺术,会替代人类设计师吗?
  • Flink中聚合算子介绍
  • spring security 认证流程分析
  • 基于DeepSeek-V2的生物量智能反演系统—从光谱特征挖掘到三维生物量场重建
  • 3.27学习总结 算法题
  • pickle 文件是什么?
  • ngx_conf_parse
  • xpp3_min dowload (xpp_3的安装)
  • MySQL聚簇索引和非聚簇索引 通俗易懂
  • 网站关于我们示例/今日国内重大新闻事件
  • 在线单页网站制作/互联网行业最新资讯
  • 德阳网站网站建设/网络seo优化平台
  • 东莞专业做淘宝网站推广/最好的网站优化公司
  • 个人可以做哪些有意思的网站/每日新闻快报
  • 长春好的做网站公司有哪些/seo sem是什么职位