/**************************************************
game Data Storage Demo code
http://blow.csdn.net/chinayaosir
**************************************************/
//0.头文件
#include <windows.h>
#include <stdio.h>
//1.数据包类定义
class cDataPackage
{
protected:
void *m_Buf;
unsigned long m_Size;
public:
cDataPackage() { m_Buf = NULL; m_Size = 0; }
~cDataPackage() { Free(); }
void *Create(unsigned long Size) {
Free();
return (m_Buf = (void*)new char[(m_Size = Size)]);
}
void Free() { delete m_Buf; m_Buf = NULL; m_Size = 0; }
BOOL Save(char *Filename)
{
FILE *fp;
if(m_Buf != NULL && m_Size) {
if((fp=fopen(Filename, "wb")) != NULL) {
fwrite(&m_Size, 1, 4, fp);
fwrite(m_Buf, 1, m_Size, fp);
fclose(fp);
return TRUE;
}
}
return FALSE;
}
void *Load(char *Filename, unsigned long *Size)
{
FILE *fp;
Free();
if((fp=fopen(Filename, "rb"))!=NULL) {
// Read in size and data
fread(&m_Size, 1, 4, fp);
if((m_Buf = (void*)new char[m_Size]) != NULL)
fread(m_Buf, 1, m_Size, fp);
fclose(fp);
// Store size to return
if(Size != NULL)
*Size = m_Size;
return m_Buf;
}
return NULL;
}
};
// 一个包含名字的测试结构sName
typedef struct {
char Name[32];
} sName;
int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, /
LPSTR szCmdLine, int nCmdShow)
{
cDataPackage DP;
DWORD Size;
// Create the data package (w/128 bytes) and get the
// pointer, casting it to an sName structure type.
sName *Names = (sName*)DP.Create(128);
// Since there are 128 bytes total, and each name uses 32 bytes,
//then I can have 4 names stored.
strcpy(Names[0].Name, "zhangsan");
strcpy(Names[1].Name, "lishi");
strcpy(Names[2].Name, "wanger");
strcpy(Names[3].Name, "chinayaosir");
// Save the names to disk and free the data buffer
DP.Save("names.dat");
DP.Free();
// Load the names from disk. Size will equal 128
// when the load function returns.
Names = (sName*)DP.Load("names.dat", &Size);
// Display the names
MessageBox(NULL, Names[0].Name, "the 1 Name ", MB_OK);
MessageBox(NULL, Names[1].Name, "the 2 Name ", MB_OK);
MessageBox(NULL, Names[2].Name, "the 3 Name ", MB_OK);
MessageBox(NULL, Names[3].Name, "the 4 Name ", MB_OK);
// Free up the data package
DP.Free();
return 0;
}
/*
run value:生成一个names.dat文件,并存有4个名字,然后用对话框显示结果
*/