读写文件,自己控制格式

根据自己的格式来读写文件的方式,很简单,留作笔记自己看看。

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");
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值