在Linux中实现类似windows中获取配置文 件的函数GetProfileString

 

参照网友资料,整理如下:

/*
* GetProfileString_Linux.cpp * * Created on: Jul 26, 2013 * Author: lbs */ /*在Linux中实现类似windows中获取配置文件的函数GetProfileString 在读取配置文件时,window环境下,有GetProfileString函数,而Linux下则没有。我写了⼀个能 实现其功能的函数,如下所示,基本思想是捉住配置文件中用“[]”标记的段没有“=”,而非“[]”段有“=” 这⼀特征,先找section段,再找键,得到对应的值。不当之处,欢迎批评指正。 配置文件示例 [section1] age = 12 name = Wang [section2] age = 13 name = Zhang */ //代码示例 #include "cstdio" #include "iostream" #include "string" #include "fstream" using namespace std; const int OP_SUCCESS = 0; const int OP_FAILED = -1; int GetProfileString(string file_name, string section_name, string item_name, string &item_value) { ifstream mystream; mystream.open(file_name.c_str(), ios::in); if (!mystream) { cout << "Error " << endl; return -1; } char line[30]; string line2; string::size_type return_of_find; bool found = false; while (mystream.getline(line, 30) && !found) //默认行不会超过30个字符 { line2 = line; return_of_find = line2.find(section_name); if (string::npos == return_of_find) continue; //没找到section项,则继续下⼀行读取 //找到了,则执行第二步,寻找相应的键值,关键是不能跨越多段 while (mystream.getline(line, 30) && !found) { line2 = line; string equal_flag = "="; return_of_find = line2.find(equal_flag); if (string::npos == return_of_find) return -1;//说明已经跨越了多段,目标寻找失败 //还在当前段中 return_of_find = line2.find(item_name); if (string::npos == return_of_find) continue; //没有找到 //找到了 return_of_find = line2.rfind(" "); //要求配置文件=两边要有空格 item_value = line2.substr(return_of_find + 1); //该行最后一个空格之后开始的为所要的item_value found = true; } } mystream.close(); return 0; } int main(int argc, char* argv[]) { string file_name, section_name, item_name, item_value; file_name = "test.txt"; section_name = "section2"; item_name = "age"; GetProfileString(file_name, section_name, item_name, item_value); cout << item_value << endl; return 0; }

 

posted @ 2013-07-26 13:47  chekliang  阅读(454)  评论(0编辑  收藏  举报