当前位置: 首页 > 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)。

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

http://www.dtcms.com/a/94137.html

相关文章:

  • 深入探索 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聚簇索引和非聚簇索引 通俗易懂
  • 【C++游戏引擎开发】第1周《线性代数》(1):环境配置与基础矩阵类设计
  • pyqt 信号与槽
  • 生物中心论
  • mysqlworkbench导入.sql文件
  • Linux应用:线程基础
  • MATLAB中iscell函数用法
  • 内嵌式触摸显示器在工业视觉设备中的应用
  • python策略模式
  • OpenBMC:BmcWeb 生效路由2 Trie字典树
  • 《Tr0ll2 靶机渗透实战:弱口令+SUID+两种缓冲区溢出+ 提权完整+fcrackzip暴力破解+shellshock漏洞+脏牛三种root提权复盘》