⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmfile.cpp

📁 在VC6.0下开发的员工管理系统源码
💻 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 + -