Linux INI 文件是一种简单的文本文件格式,用于存储配置信息。它们通常包含节(sections)、键(keys)和值(values),格式如下:
[section1]
key1=value1
key2=value2
[section2]
keyA=valueA
keyB=valueB
[]
包围的部分,用于逻辑分组。在 C++ 中,可以使用第三方库如 inih
或标准库结合文件 I/O 来读取和写入 INI 文件。
#include <iostream>
#include <fstream>
#include <sstream>
#include <map>
#include <string>
std::map<std::string, std::map<std::string, std::string>> readIniFile(const std::string& filename) {
std::map<std::string, std::map<std::string, std::string>> iniData;
std::ifstream file(filename);
std::string line;
std::string currentSection;
while (std::getline(file, line)) {
// Trim leading and trailing whitespace
line.erase(0, line.find_first_not_of(" \t\r\n"));
line.erase(line.find_last_not_of(" \t\r\n") + 1);
if (line.empty() || line[0] == ';') continue; // Skip empty lines and comments
if (line[0] == '[' && line.back() == ']') {
currentSection = line.substr(1, line.size() - 2);
} else {
size_t equalsPos = line.find('=');
if (equalsPos != std::string::npos) {
std::string key = line.substr(0, equalsPos);
std::string value = line.substr(equalsPos + 1);
iniData[currentSection][key] = value;
}
}
}
return iniData;
}
int main() {
auto config = readIniFile("example.ini");
for (const auto& section : config) {
std::cout << "[" << section.first << "]" << std::endl;
for (const auto& keyValue : section.second) {
std::cout << keyValue.first << " = " << keyValue.second << std::endl;
}
}
return 0;
}
原因:可能是文件编码问题、不正确的节或键值对格式。 解决方法:
通过以上方法,可以有效地处理 INI 文件,并确保程序的稳定性和可靠性。
领取专属 10元无门槛券
手把手带您无忧上云