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)。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值