乐闻世界logo
搜索文章和话题

How to get file extension from string in C++

6 个月前提问
5 个月前修改
浏览次数26

1个答案

1

在C++中,从字符串中提取文件扩展名是一个常见的任务,特别是在处理文件输入/输出时。这里有几种方法来实现这一点,我将向您介绍两种常用的方法:

方法1:使用标准库函数 find_last_of

这种方法利用了 std::string 类的 find_last_of 方法来查找文件名中最后一个点(.)的位置,从而获取扩展名。

cpp
#include <iostream> #include <string> std::string getExtension(const std::string& filename) { // 找到最后一个点的位置 size_t lastDot = filename.find_last_of("."); if (lastDot == std::string::npos) { return ""; // 没有找到点,意味着没有扩展名 } return filename.substr(lastDot + 1); } int main() { std::string filename = "example.txt"; std::string extension = getExtension(filename); std::cout << "File extension: " << extension << std::endl; return 0; }

方法2: 使用 std::filesystem::path

在C++17及以上版本中,std::filesystem 提供了更为强大和直观的文件系统处理能力。通过这个库,我们可以更方便地获取文件扩展名。

cpp
#include <iostream> #include <filesystem> std::string getExtension(const std::string& filename) { std::filesystem::path filePath(filename); return filePath.extension().string(); } int main() { std::string filename = "example.txt"; std::string extension = getExtension(filename); std::cout << "File extension: " << extension << std::endl; return 0; }

std::filesystem::path::extension() 方法直接提供了扩展名,包括点(.),如果想要不带点的扩展名,可以对返回的字符串稍作处理。

总结

两种方法各有优劣,第一种方法不依赖于C++17,兼容性更好,但是代码较为手动。第二种方法代码简洁,易于理解,但需要C++17及以上版本。在实际应用中,可以根据项目需求和编译器支持情况选择适合的方法。

2024年6月29日 12:07 回复

你的答案