在项目中遇到读取ini的方法,这个可能用过MFC的都会吧,我是第一次接触还比较有兴趣写下来,下边就以一对一,一对多的读取以实列剖析:
#include <iostream>
#include <tchar.h>
#include <algorithm>
#include <stdio.h>
#include <windows.h >
struct tagSpecialWinLoseItem
{
LONGLONG SpecialScore;
int BigSmallWinProbability;
int PairWinProbability;
tagSpecialWinLoseItem()
{
SpecialScore = 0L;
BigSmallWinProbability = 0;
PairWinProbability = 0;
}
void operator=(tagSpecialWinLoseItem& that)
{
SpecialScore = that.SpecialScore;
BigSmallWinProbability = that.BigSmallWinProbability;
PairWinProbability = that.PairWinProbability;
}
};
int num; //配置总数目(ini里边这一项配置了多少条,正确读取出来就应该是多少,本实例一共10条)
tagSpecialWinLoseItem SpecialItems[10];//结构体数组
int main()
{
TCHAR szPath[MAX_PATH] =TEXT("");
GetCurrentDirectory(sizeof(szPath), szPath);//获取ini的路径
TCHAR szFileName[MAX_PATH] = { 0 };
_sntprintf(szFileName, sizeof(szFileName), _T("%s\\BlackList.ini"), szPath);//流模式格式化输入到清0后的szFileName
//这里就是一对一读取字段 PlayerCount (ini里边是多少读出来就是多少)
int playCount = GetPrivateProfileInt(_T("RoomSet"), _T("PlayerCount"), -1, szFileName);
//一对多读取,用写好的结构体存储,先将结构体清理一遍以防数据错误
ZeroMemory(SpecialItems, sizeof(SpecialItems));
//RoomSet就是写在ini最顶部的名字,相当于一个名字以辨别是什么用途
TCHAR AppName[] = { _T("RoomSet") };
//获取该项配置的数目
int Num = GetPrivateProfileInt(AppName, _T("BigSmallProbability_Num"), 0, szFileName);
tagSpecialWinLoseItem Item;
//从上到下从左到右读取数据
for (WORD Index = 0; Index < Num; Index++)
{
TCHAR KeyName[32];
TCHAR StringData[128];
ZeroMemory(StringData, sizeof(StringData));
swprintf(KeyName, sizeof(KeyName), _T("BigSmallProbabilityCard%d"), Index);
int ReadSize = GetPrivateProfileString(AppName, KeyName, _T(""), StringData, sizeof(StringData), szFileName);
TCHAR * temp = StringData;
Item.BigSmallWinProbability = _wtoi(temp);
temp = wcschr(temp, ',') + 1;
Item.PairWinProbability = _wtoi(temp);
temp = wcschr(temp, ',') + 1;
Item.SpecialScore = _wtoi64(temp);
SpecialItems[Index] = Item;
num++;
}
system("pause");
return true;
}
这里贴上.ini的图片 当然可以根据自己的需求去配置