21xrx.com
2024-11-22 05:42:55 Friday
登录
文章检索 我的文章 写文章
C++读取UTF-8格式的INI配置文件
2023-07-13 18:36:00 深夜i     --     --
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。

  
  

评论区

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