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

来源:互联网 发布:如何查看淘宝等级 编辑:程序博客网 时间:2024/04/20 10:31
#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; }}; 

原创粉丝点击