📄 mmfile.cpp
字号:
// MMFile.cpp: implementation of the CMMFile class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "employee.h"
#include "MMFile.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//文件名称:MMFile.cpp
//创建者: 徐钢
//创建时间:2007-06-07
//最后修改时间:2007-06-24
//功能:实现磁盘文件与内存中的映象文件的数据交换
//与其他文件的依赖关系:Manager.h 文件中要用到前向引用声明类 CMMFile 来定义一个 CMMFile 类的指针 pMMFile
// Manager.cpp 文件中要引用"MMFile.h"以用来使 pMMFile 指针调用 CMMFile 类的函数
// 构造函数
CMMFile::CMMFile()
{
m_hFile=NULL;
m_hFileMap=NULL;
m_lpFileMapBuffer=NULL;
m_pFileName="";
m_pMapName="";
m_dwSize=0;
}
// 析构函数
CMMFile::~CMMFile()
{
Destroy();
}
// 功能:释放文件
void CMMFile::Destroy()
{
if(m_lpFileMapBuffer)
{
UnmapViewOfFile(m_lpFileMapBuffer); //从进程的地址空间撤消文件数据映像
m_lpFileMapBuffer=NULL;
}
if(m_hFileMap)
{
CloseHandle(m_hFileMap); //关闭文件内核对象
m_hFileMap=NULL;
}
if(m_hFile && m_hFile!=INVALID_HANDLE_VALUE)
{
CloseHandle(m_hFile); //关闭文件
m_hFile=NULL;
}
if(m_pFileName!="")
m_pFileName="";
if(m_pMapName!="")
m_pMapName="";
}
// 功能:将数据写入文件
BOOL CMMFile::WriteToFile(LPVOID pBuffer,DWORD dwOffsetAddr,DWORD dwSize)
{
if(!m_lpFileMapBuffer) return FALSE;
memcpy((BYTE*)m_lpFileMapBuffer+dwOffsetAddr,pBuffer,dwSize);
return TRUE;
}
// 功能:从文件读取数据
BOOL CMMFile::ReadFromFile(LPVOID pBuffer,DWORD dwOffsetAddr,DWORD dwSize)
{
if(!m_lpFileMapBuffer)return FALSE;
memcpy(pBuffer,(BYTE*)m_lpFileMapBuffer+dwOffsetAddr,dwSize);
return TRUE;
}
// 功能:创建映象
BOOL CMMFile::OpenMem(LPCTSTR szFileName, LPCTSTR szMapName, DWORD dwSize)
{
if(m_lpFileMapBuffer) return TRUE;
m_pFileName=szFileName;
m_pMapName=szMapName;
m_dwSize=dwSize;
m_hFileMap = OpenFileMapping(FILE_MAP_ALL_ACCESS,TRUE,m_pMapName);
if((!m_hFileMap)||(m_hFileMap==INVALID_HANDLE_VALUE))
{
if((!m_hFile)||(m_hFile==INVALID_HANDLE_VALUE))
{
if(dwSize==0)
{
m_hFile=CreateFile(m_pFileName,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if((!m_hFile)||(m_hFile==INVALID_HANDLE_VALUE))
return FALSE;
}
else
{
m_hFile=CreateFile(m_pFileName,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if((!m_hFile)||(m_hFile==INVALID_HANDLE_VALUE))
return FALSE;
}
}
m_hFileMap=CreateFileMapping(m_hFile,NULL,PAGE_READWRITE,0,m_dwSize,m_pMapName);
if((!m_hFileMap)||(m_hFileMap==INVALID_HANDLE_VALUE))
{
CloseHandle(m_hFile);
return FALSE;
}
}
if(!(m_lpFileMapBuffer=MapViewOfFile(m_hFileMap,FILE_MAP_ALL_ACCESS,0,0,m_dwSize)))
{
DWORD ER=GetLastError();
return FALSE;
}
return TRUE;
}
// 功能:释放建残留的 m_pFileName 的句柄,建立新文件映像
BOOL CMMFile::OpenNewMem(LPCTSTR szFileName, LPCTSTR szMapName, DWORD dwSize)
{
HANDLE hTmpFile;
hTmpFile=CreateFile(m_pFileName,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hTmpFile)
{
CloseHandle(hTmpFile);
DeleteFile(m_pFileName);
}
return OpenMem(szFileName,szMapName,dwSize);
}
// 功能:关闭文件数据映像
BOOL CMMFile::CloseMem()
{
if(m_lpFileMapBuffer)
{
UnmapViewOfFile(m_lpFileMapBuffer);
m_lpFileMapBuffer=NULL;
return TRUE;
}
else
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -