分享一个我写的io序列化类IOPack

45 篇文章 0 订阅
34 篇文章 0 订阅

#include <vector>

 


/************************************************************************/
/* 

 一个io模版.来实现对结构体等对象的存储和加载


 struct stCityInfo 
 {
	 char cityName[255];
	 POINT A; 
	 POINT B; 
 };

 IOPack<stCityInfo> io; 


 int _tmain(int argc, _TCHAR* argv[])
 {
	 io.LoadFromFile("city.dat");

	 stCityInfo info;
	 strcpy(info.cityName,"武汉");
	 info.A.x=111;
	 info.A.y=222;
	 info.B.x=333;
	 info.B.y=444;

	 printf("%d \n",io.m_List.size());

 }

  simawei@qq.com  2012

*/
/************************************************************************/

template<typename T>
class IOPack
{
public:
	IOPack(void){

	}
	~IOPack(void){

	}
 
	bool LoadFromFile(const char* filename)
	{
		printf("InitFromFile [%s]\n",filename);

		FILE* f=fopen(filename,"rb");
		if (NULL==f)
		{
			printf("[line:%d][%s] open err\n",__LINE__,__FUNCTION__);
			return false;
		}

		int totalsize = GetFileSize(filename);
		if (totalsize==-1)
		{
			return false;
		}

		int readoffset=0;
		while(readoffset<totalsize)
		{
			T p;

			fread(&p,sizeof(T),1,f);

			readoffset+=sizeof(T);

			m_List.push_back(p);
 
		}

		fclose(f);

		printf("[line:%d][%s]  OK \n",__LINE__,__FUNCTION__);
		return true;
	}

	bool  SaveToFile(const char* filename)
	{
		FILE* f=fopen(filename,"ab+");
		if (NULL==f)
		{
			printf("open err\n");
			return false;
		}


		for(int i=0;i<m_List.size();i++){
			fwrite(&m_List[i],sizeof(T),1,f);
		}

		fclose(f);

		return true;
	}

 
	std::vector<T> m_List;

private:

	long GetFileSize(const  char* filename )
	{
		FILE* fp = fopen( filename, "r" );
		if (fp==NULL) return -1;
		fseek( fp, 0L, SEEK_END );
		int s=ftell(fp);
		fclose(fp);
		return  s; 
	}

}; 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值