21xrx.com
2025-03-17 15:12:19 Monday
文章检索 我的文章 写文章
C++读取UTF-8格式的INI配置文件
2023-07-13 18:36:00 深夜i     12     0
C++ UTF-8 INI配置文件 读取 格式

C++ 读取 UTF-8 格式的 INI 配置文件并不困难,只需要用到一些 C++ stl 库中的函数和标准函数库即可。

INI 配置文件是一种非常常见的配置文件,它常见于各类应用软件和操作系统中,例如 Windows 系统的 registry,Linux 系统的 /etc 目录下的 .conf 文件等等。

针对 UTF-8 格式的 INI 配置文件,我们可以使用 C++ stl 库中的 ifstream 输入流和 getline() 函数读取文件内容。而获取键值对的方式可以用到标准函数库中的 string::find() 和 string::substr() 函数。

下面是一个简单的读取 UTF-8 格式的 INI 配置文件的代码示例:

#include <iostream>
#include <fstream>
#include <string>
#include <map>
using namespace std;
void trim(string& str)
{
  if (str.empty())
    return;
  
  str.erase(0, str.find_first_not_of(" \t\r\n"));
  str.erase(str.find_last_not_of(" \t\r\n") + 1);
}
int main()
{
  map<string, string> config;
  ifstream ifs("config.ini", ifstream::in);
  string line;
  string section;
  while (getline(ifs, line)) {
    trim(line);
    if (line.empty() || line[0] == ';')
      continue;
    
    if (line[0] == '[' && line[line.size() - 1] == ']') {
      section = line.substr(1, line.size() - 2);
    } else {
      size_t pos = line.find('=');
      if (pos != string::npos) {
        string key = section.empty() ? line.substr(0, pos) : section + "." + line.substr(0, pos);
        string value = line.substr(pos + 1);
        trim(key);
        trim(value);
        config[key] = value;
      }
    }
  }
  for (auto& kv : config)
    cout << kv.first << " = " << kv.second << endl;
  
  return 0;
}

以上代码会将读取到的键值对存储在一个 map 中,并且在程序执行完后将所有键值对打印到控制台上。在实际使用时,我们可以自由扩展代码,添加自己的业务逻辑。

当然,如果你需要更高效、更强大的 INI 解析器,可以考虑使用第三方库,例如 boost 中的 property_tree。

  
  

评论区