将结构体保存到文件中
在找不到合适的方式保存数据时,可以将数据保存到文件中,下面以结构体为例,保存其他数据都是一样的,以字节形式进行存储。
保存结构体到文件中
函数接受一个保存结构体的文件路径(后缀自定义即可),接受一个要保存到结构体的结构体指针和结构体大小。
BOOL SaveStructInfoToFile(wstring const &strPath, LPVOID lpAddress, DWORD dwSize)
{
HANDLE hFile =INVALID_HANDLE_VALUE;
PBYTE pBuff = NULL;
DWORD dwWrite = 0;
if (PathFileExistsW(strPath.c_str()))
{
DeleteFileW(strPath.c_str());
}
pBuff = new BYTE[dwSize];
hFile = CreateFileW(strPath.c_str(), // file to open
GENERIC_READ|GENERIC_WRITE, // open for reading
FILE_SHARE_READ, // share for reading
NULL, // default security
CREATE_ALWAYS, //
FILE_ATTRIBUTE_NORMAL, // normal file
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
return FALSE;
}
memcpy(pBuff, lpAddress, dwSize);
WriteFile(hFile, pBuff, dwSize, &dwWrite, NULL);
//关闭文件
delete [] pBuff;
CloseHandle(hFile);
return TRUE;
}
从保存的文件中读取结构体
函数接受一个保存结构体的文件路径(后缀自定义即可),接受一个要保存到结构体的结构体指针和结构体大小。
BOOL ReadStructInfo(wstring const &strPath, LPVOID lpReadAddress, DWORD dwSize)
{
DWORD dwWrite = 0;
HANDLE hFile =INVALID_HANDLE_VALUE;
if (!PathFileExistsW(strPath.c_str()))
{
return FALSE;
}
hFile = CreateFile(strPath.c_str(), // file to open
GENERIC_READ|GENERIC_WRITE, // open for reading
FILE_SHARE_READ, // share for reading
NULL, // default security
OPEN_EXISTING, // 打开现存的
FILE_ATTRIBUTE_NORMAL, // normal file
NULL); // no attr. template
if (hFile == INVALID_HANDLE_VALUE)
{
return FALSE;
}
ReadFile(hFile, lpReadAddress, dwSize, &dwWrite, NULL);
CloseHandle(hFile);
return TRUE;
}
函数执行成功后,第二个参数保存结构体数据,后面使用强转一下就好。