21xrx.com
2024-11-22 07:47:39 Friday
登录
文章检索 我的文章 写文章
C++检测文件扩展名
2023-06-27 18:22:55 深夜i     --     --
C++ 文件 扩展名 检测 判断

在C++编程中,很多时候需要对文件进行操作,如打开、读取、写入等。但是在处理文件操作之前,我们需要先确定文件的类型,这就需要对文件的扩展名进行检测。

在C++中,可以通过以下方式来获取文件的扩展名:


#include <iostream>

#include <string>

using namespace std;

string getFileExt(const string& filename) {

  size_t dot = filename.find_last_of(".");

  if (dot == string::npos) return "";

  return filename.substr(dot + 1);

}

int main() {

  string filename = "example.txt";

  string ext = getFileExt(filename);

  cout << ext << endl; // 输出 txt

  return 0;

}

上述的代码通过一个 `getFileExt` 函数来获取文件的扩展名,参数是文件名的字符串。函数先使用 `find_last_of` 方法来找到最后一个点的位置,即文件名中扩展名的起始位置,如果找不到点,则返回空字符串。然后再用 `substr` 方法提取出点之后的字符串,即为文件的扩展名。

当然,还有更简洁的写法,可以先找到最后一个点的位置,再从那个位置开始截取字符串到结尾:


string getFileExt(const string& filename) {

  return filename.substr(filename.find_last_of(".") + 1);

}

除了上述的方法,还可以使用正则表达式来获取文件的扩展名,如下所示:


#include <iostream>

#include <regex>

using namespace std;

string getFileExt(const string& filename) {

  static const regex ext_regex("(\\.[^./\\\\]*$|$)");

  smatch m;

  regex_search(filename, m, ext_regex);

  return m.str().substr(1);

}

int main() {

  string filename = "example.txt";

  string ext = getFileExt(filename);

  cout << ext << endl; // 输出 txt

  return 0;

}

以上的代码使用了正则表达式来匹配文件的扩展名,其中的表达式 `(\\.[^./\\\\]*$|$)` 意为匹配以点(`.`)开头,后面没有斜杠(`/`)或反斜杠(`\`)的字符串,或者匹配整个字符串。通过 `regex_search` 方法将正则表达式和文件名匹配,再取第一个匹配到的子字符串,即为文件的扩展名。

总的来说,获取文件的扩展名在C++中是一个比较简单的操作,可以使用上述的方法来实现。在实际应用中,还需要注意文件名的合法性、大小写转换等问题。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复