根据自己的格式来读写文件的方式,很简单,留作笔记自己看看。
typedef struct _HANDL_MAP
{
_HANDL_MAP()
{
nIsTPSL = 0;
nIsStop = 0;
nIsHandl = 1;
}
int nIsTPSL;
int nIsStop;
int nIsHandl;
}HANDL_MAP,*PHANDL_MAP;
//映射写入文件
void WriteHandlMap(const int nMtOrderID, const HANDL_MAP& Handl_map)
{
m_syncHandlMapfile.Lock();
char chOrderBuf[128] = "";//写入一行MtOrderID,IsHandl,IsTPSL,IsStop\n
sprintf_s(chOrderBuf, "%d,%d,%d,%d\n", nMtOrderID, Handl_map.nIsHandl, Handl_map.nIsTPSL, Handl_map.nIsStop);
string strOrderDir = ExLog.GetHandlDir();
FILE* pfile = NULL;
if( 0 == fopen_s(&pfile,strOrderDir.c_str(),"a+"))
{
fwrite(chOrderBuf,1,strlen(chOrderBuf),pfile);
fclose(pfile);
}
else
{
ExLog.OutLog(CmdErr, "HandlFilter", "open GetHandlDir error:%s", strOrderDir.c_str());
}
m_syncHandlMapfile.Unlock();
}
//初始化加载处理映射
void LoadHandlMap()
{
map<int ,HANDL_MAP>::iterator it;
FILE* pfile = NULL;
string strOrderDir = ExLog.GetHandlDir();
if( 0 == fopen_s(&pfile,strOrderDir.c_str(),"r+"))
{
fseek(pfile,0,SEEK_END);
u32 dwsize = ftell(pfile);
rewind(pfile);
char* filebuffer = new char[dwsize];
size_t nsize = fread(filebuffer, 1, dwsize, pfile);
if (nsize != dwsize)
{
fclose(pfile);
fopen_s(&pfile,strOrderDir.c_str(),"r+");
dwsize = nsize;
delete []filebuffer;
filebuffer = new char[dwsize];
fread(filebuffer, 1, dwsize, pfile);
}
char *szsepLine = "\n";
char *szsepRow = ",";
char* sznexttokenLine = NULL;
char* sznexttokenRow = NULL;
int nMTid = 0;
HANDL_MAP Handl_map;
char* szLine = strtok_s(filebuffer,szsepLine,&sznexttokenLine);
while(NULL != szLine)//取一行
{
char* szRow = strtok_s(szLine,szsepRow,&sznexttokenRow);
int i = 1;
while(NULL != szRow)//读取一行MtOrderID,IsHandl,IsTPSL,IsStop\n
{
if (1 == i)
{
nMTid = atoi(szRow);
}
else if (2 == i)
{
Handl_map.nIsHandl = atoi(szRow);
}
else if (3 == i)
{
Handl_map.nIsTPSL = atoi(szRow);
}
else if (4 == i)
{
Handl_map.nIsStop = atoi(szRow);
}
i++;
szRow = strtok_s(NULL,szsepRow,&sznexttokenRow);
}
m_syncHandlMap.Lock();
it = m_mapHandl.find(nMTid);
if (it == m_mapHandl.end())
{
m_mapHandl.insert(pair<int ,HANDL_MAP>(nMTid, Handl_map));
}
else
{
m_mapHandl.erase(it);
m_mapHandl.insert(pair<int ,HANDL_MAP>(nMTid, Handl_map));
}
m_syncHandlMap.Unlock();
szLine = strtok_s(NULL,szsepLine,&sznexttokenLine);
}
fclose(pfile);
delete []filebuffer;
}
ExLog.OutLog(CmdOK, "LoadHandlMap", "ok");
}