C++ stl 读写ini配置文件
2011-01-15 09:57
639 查看
头文件(IniFile.h)
实现文件(IniFile.cpp)
测试代码
复制代码 #ifndef __CINI_FILE__ #define __CINI_FILE__ #include <string> #include <vector> using namespace std; /* 程序说明 1.从INI文件中读取参数 2.将参数写入INI格式文件 3.[sectin]必须第一个字符为'[',并以']'结束 4.';'后的字符串全部为注释 5.参数以name=value的方式表示,每一行只能设置一个参数,'='不能含有空格 6.没有对程序中注释做额外的处理,在写入文件时,没有考虑将注释写入INI文件 7.关于INI文件格式定义请参考: http://www.microsoft.com/technet/archive/wfw/0_welcom.mspx?mfr=true */ //参数行 struct CIniEntry { CIniEntry(){} CIniEntry(char* szName,char* szValue):m_strName(szName),m_strValue(szValue){} string m_strName; string m_strValue; }; //注释行 struct CIniComment { CIniComment(){} CIniComment(char* strCmt):m_strComment(strCmt){} string m_strComment; }; //Section struct CIniSection { string m_isName; vector<CIniEntry> m_ieEntry; vector<CIniComment> m_icComment; }; class CIniFile { public: //从INI文件中读取参数 int ReadIniFile(char* szIniFile); //将参数写入INI文件 int WriteIniFile(char* szIniFile); //删除字符串两端的空格 int Trim(char* &szString); //去除字符串中的注释 int RemoveComment(char* szLine); private: vector<CIniSection> m_isSection; }; #endif |
复制代码 #include "IniFile.h" #include <fstream> using namespace std; //一行最大字符数为260 #define MAX_COLS 260 #define E_OK 0x00L #define E_OPEN_FILE_FAILED 0x01L /* 功能 读取INI文件 参数 szIniFile in 读入的INI文件名称 返回值 E_OK 调用成功 E_OPEN_FILE_FAILED 打开文件错我 */ int CIniFile::ReadIniFile(char* szIniFile) { ifstream fIniFile(szIniFile); if(fIniFile == NULL) { return E_OPEN_FILE_FAILED; } char szLine[MAX_COLS] = {0}; while (fIniFile.getline(szLine,MAX_COLS)) { char* p = szLine; //是否为[] if( *p == '[') { RemoveComment( p ); char* pEnd = strchr( p ,']'); if( pEnd == NULL) continue; *pEnd = 0; CIniSection is; is.m_isName = string( p + 1 ); m_isSection.push_back(is); continue; } //是否为; Trim( p ); if( *p == ';') { m_isSection[m_isSection.size() - 1].m_icComment.push_back(p + 1); continue; } //否则视为entry //p = szLine; char* pTemp = strchr( p,'='); if(pTemp == NULL) { continue; } *pTemp = 0; //创建一个Entry CIniEntry ie; ie.m_strName = p ; ie.m_strValue = pTemp + 1; //将Entry加入到响应的Section m_isSection[m_isSection.size() - 1 ].m_ieEntry.push_back(ie); memset(szLine,0,MAX_COLS); } fIniFile.close(); return E_OK; } /* 功能 将CIniFile中的内容写入文件 参数 szIniFile in 生成的INI文件名称 返回值 E_OK 调用成功 E_OPEN_FILE_FAILED 打开文件错误 */ int CIniFile::WriteIniFile(char* szIniFile) { ofstream fIniFile(szIniFile); if(fIniFile == NULL) return E_OPEN_FILE_FAILED; for (size_t i = 0; i < m_isSection.size();++i) { fIniFile.write("[",1); fIniFile.write(m_isSection[i].m_isName.c_str(),m_isSection[i].m_isName.length()); fIniFile.write("]",1); fIniFile << endl; for (size_t j = 0; j < m_isSection[i].m_ieEntry.size();++ j) { fIniFile.write(m_isSection[i].m_ieEntry[j].m_strName.c_str(),m_isSection[i].m_ieEntry[j].m_strName.length()); fIniFile.write("=",1); fIniFile.write(m_isSection[i].m_ieEntry[j].m_strValue.c_str(),m_isSection[i].m_ieEntry[j].m_strValue.length()); fIniFile << endl; } } fIniFile.close(); return E_OK; } /* 功能 删除前后的空格(' ','/t','/r','/n') 参数 szString in 传入的字符串 out 去除空格后的字符串 返回值 E_OK 调用成功 */ int CIniFile::Trim(char* &szString) { char* p = szString; while (*p == ' ' || *p == '/t') { p ++; } szString = p; p = szString + strlen(szString) - 1; while ( *p == ' ' || *p == '/t' || *p == '/r' || *p == '/n') { -- p; } *( p + 1 ) = 0; return E_OK; } /* 功能 删除注释 参数 szLine in 传入的字符串 out 删除注释后的字符串 返回值 E_OK 调用成功 */ int CIniFile::RemoveComment(char* szLine) { char* p = strchr(szLine,';'); if( p == NULL) return 0; *p = 0; return 0; } |
复制代码 CIniFile cf; cf.ReadIniFile("IniFile.ini"); cf.WriteIniFile("IniFile2.ini"); |
相关文章推荐
- C++读写ini配置文件
- C++[类设计] ini配置文件读写类config
- C++针对ini配置文件读写大全
- C++读写INI配置文件
- 用于读写 INI 配置文件的 C++ 类
- C++读写ini配置文件
- C++针对ini配置文件读写大全
- C++中通过MFC对ini初始化,配置文件的读写使用
- C++读写ini配置文件
- 【转载】C++读写ini配置文件GetPrivateProfileString()&WritePrivateProfileString()
- C++对ini配置文件与xml配置文件的读写
- C++读写ini配置文件
- C++读写INI配置文件的类实例
- 【C++】读写ini配置文件
- C++读写ini配置文件GetPrivateProfileString()&WritePrivateProfileString()
- C++读写ini配置文件
- [C/C++]伪读写ini配置文件
- C++读写ini配置文件
- C++读写ini配置文件GetPrivateProfileString()&WritePrivateProfileString()
- C++[类设计] ini配置文件读写类config