将数据保存到文件中

c++

Posted by YiMiTuMi on December 1, 2021

将结构体保存到文件中

在找不到合适的方式保存数据时,可以将数据保存到文件中,下面以结构体为例,保存其他数据都是一样的,以字节形式进行存储。

保存结构体到文件中

函数接受一个保存结构体的文件路径(后缀自定义即可),接受一个要保存到结构体的结构体指针和结构体大小。

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

函数执行成功后,第二个参数保存结构体数据,后面使用强转一下就好。

蓝色妖姬 – 相守