#ifndef __SEC_FILE_H__
#define __SEC_FILE_H__
#include <string>
#include <vector>
#include <map>
using std::string;
using std::map;
using std::vector;
class SecFile
{
private:
string path;
static const char secComment = '#';
vector<string> vFile;
public:
int load(string path);
string getPath();
int getSec(string tag, vector<string>& vSec);
int getMaps(string tag, map<string, string>& mKVs);
int getKets(string tag, vector<string>& vKets);
string getValue(string tag, string ket);
string secToLine(string tag);
};
#endif //__SEC_FILE_H__
#include "secfile.h"
#include "stringutil.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int SecFile::load(string path)
{
this->path = path;
ifstream infile(path.c_str());
if ( ! infile)
{
cout << "not this file" + path << endl;
return -1;
}
int rowCount = 0;
string line;
while (getline(infile, line))
{
line = StringUtil::Trim(line);
if (this->secComment == line[0] || line.length() == 0)
continue;
this->vFile.push_back(line);
++rowCount;
}
infile.close();
return rowCount;
}
string SecFile::getPath()
{
return this->path;
}
int SecFile::getSec(string tag, vector<string>& vSec)
{
const string sBeg("<"+tag+">");
const string sEnd("</"+tag+">");
vector<string>::const_iterator ix = this->vFile.begin();
for ( ; this->vFile.end() != ix; ++ix )
{
if ( 0 == sBeg.compare((*ix).substr(0,sBeg.size())) )
{
++ix;
break;
}
}
if (this->vFile.end() == ix) return -1;
for (int rowCount = 0 ;ix != vFile.end(); ++ix )
{
if (sEnd == *ix) return rowCount;
vSec.push_back(*ix);
++rowCount;
}
return -1;
}
int SecFile::getKets(string tag, vector<string>& vKets)
{
string ket;
int ketCount = 0;
vector<string> vSec;
this->getSec(tag,vSec);
vector<string>::const_iterator ix = vSec.begin();
for ( ; ix != vSec.end(); ++ix )
{
ket = (*ix).substr(0, (*ix).find('='));
ket = StringUtil::Trim(ket);
vKets.push_back(ket);
++ketCount;
}
return ketCount;
}
string SecFile::getValue(string tag, string ket)
{
vector<string> vSec;
this->getSec(tag,vSec);
vector<string>::const_iterator ix = vSec.begin();
for ( ; ix != vSec.end(); ++ix )
{
if ((*ix).substr(0, ket.length()) == ket)
{
string value = (*ix).substr((*ix).find('=') + 1 );
value = StringUtil::Trim(value);
return value;
}
}
return "";
}
int SecFile::getMaps(string tag, map<string, string>& mKVs)
{
vector<string> vSec;
this->getSec(tag,vSec);
string ket;
string value;
int iCount = 0;
vector<string>::const_iterator ix = vSec.begin();
for ( ; ix != vSec.end(); ++ix )
{
ket = (*ix).substr(0, (*ix).find('='));
ket = StringUtil::Trim(ket);
value = (*ix).substr((*ix).find('=') + 1 );
value = StringUtil::Trim(value);
mKVs.insert(make_pair(ket,value));
iCount++;
}
return iCount;
}
string SecFile::secToLine(string tag)
{
vector<string> vSec;
if (this->getSec(tag, vSec) == -1) return "";
vector<string>::const_iterator ix = vSec.begin();
string sLine = *(ix++);
for ( ;ix != vSec.end(); ++ix )
{
sLine = sLine + " " + *ix;
}
return sLine;
}
分享到:
相关推荐
std::cerr << "Failed to read from the ini file." ; } return 0; } ``` ### 5. 错误处理与优化 在实际应用中,需要处理读取失败的情况,可能是因为文件不存在、无权限或其他系统错误。此外,为了提高代码的可...
`ini-File-Access-class.zip` 提供了一个封装好的C++类,专门用于处理INI文件的操作,这使得开发者能更方便地读写这些配置数据。下面我们将详细探讨C++中的FILE类、文件操作类以及INI文件的处理方法。 C++标准库中...
I. Design of the homework In this homework, we will practice some important knowledge of C++ in the chapters on classes, ...The testing .cpp files, whose file names include the prefix "test", are comple
HANDLE hFile = CreateFile(filePath.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) return sections; char szBuffer...
"INI_file_TEST.rar_配置文件"是一个示例,展示了如何使用INI文件来存储并读取应用的配置参数,特别是与界面尺寸相关的设置,如主窗体的长宽高。 INI文件是一种常见的配置文件格式,源自早期的Windows操作系统。它...
std::string value = ini.read("Section1", "Key1"); std::cout 的值: " ; value = ini.read("Section2", "Key3"); std::cout 的值: " ; return 0; } ``` 这个例子展示了如何创建一个IniFile类,该类提供了...
在C++中,我们可以自定义一个INI File类来处理此类文件。以下是一个简单的类设计: ```cpp class IniFile { public: IniFile(const std::string& filePath); void write(const std::string& section, const ...
config.read('config.ini') section1_value1 = config.get('Section1', 'Key1') section1_value2 = config.get('Section1', 'Key2') section2_value3 = config.get('Section2', 'Key3') ``` 写入配置文件: ```...
As every C++ programmer knows, the language has many powerful features, but this power brings with it complexity, which in turn can make code more bug-prone and harder to read and maintain....
在Visual C++ 6(简称VC6)环境下,开发人员可以利用MFC(Microsoft Foundation Classes)库中的CIniFile类来方便地读写ini配置文件。CIniFile类提供了许多成员函数,使得对ini文件的读写和修改变得非常便捷。 首先...
FILE_MAP_ALL_ACCESS, // 所有权限,包括读写 0, // 高32位的偏移量 0, // 低32位的偏移量 memSize); // 映射的内存大小 if (pMem == NULL) { CloseHandle(hMapFile); std::cerr << "Failed to map view of ...
delete_file_from_ini('example.ini', 'Section1', 'Key1') ``` 四、注意事项 在执行删除操作时,务必小心,因为这会永久性地改变文件内容。确保在进行此类操作前有备份,以防意外。同时,如果文件正在被其他进程...
fprintf(file, "[%s]\n%s=%s\n", section, key, value); fclose(file); } } void readIni(const char* filename, const char* section, const char* key, char* value, int maxLen) { FILE* file = fopen...
除了读写字符串,`TIniFile`还提供了读写整数(`ReadInteger`/`WriteInteger`)、布尔值(`ReadBool`/`WriteBool`)等方法。 在完成所有操作后,记得释放`TIniFile`对象: ```cpp delete Ini; ``` 在提供的文件...
void writeIniFile(const std::string& filePath, const std::map, IniSection>& sections) { // 写入ini文件的逻辑... } ``` **6. 使用第三方库libconfig** libconfig是一个强大的配置文件解析库,它支持ini文件...
CRITICAL_SECTION cs_Read; struct ThreadInfo //线程信息 { int Threadhao; //线程序号 char ThreadClass; //线程类别 double ThreadStartTime; //线程开始时间 double ThreadRunTime; //线程读写持续时间 }; ...
在C++编程中,处理ini文件可以帮助我们实现程序的个性化配置和持久化存储。下面将详细介绍如何在C++中实现ini文件的解析,以及提供的demo示例。 1. ini文件结构: ini文件通常包含多个节(Section),每个节下面有...
void IniFile::read(const std::string& filename) { std::ifstream file(filename); std::string line, section, key, value; if (file.is_open()) { while (std::getline(file, line)) { // 处理空行和注释...
不同的编程语言通常都有对应的库或模块来支持ini文件操作,如Python的`ConfigParser`,C++的`pugixml`,Java的`java.util.Properties`等。 七、注意事项 1. 在读写ini文件时,需确保文件权限允许读写操作。 2. 写入...
void read_ini_file(char* filename) { FILE* file = fopen(filename, "r"); if (file == NULL) { printf("Failed to open the ini file.\n"); return; } char line[256]; while (fgets(line, sizeof(line)...