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

📄 mmfile.cpp

📁 用C++完成一个学生信息管理系统 要求有界面
💻 CPP
字号:
// MMFile.cpp: implementation of the CMMFile class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MMFile.h"
CMMFile::CMMFile(BOOL autoDelete)
{
	m_autoDelete=autoDelete;
	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!="")
	{
		if(m_autoDelete)
			DeleteFile(m_pFileName);
		m_pFileName="";
	}

	if(m_pMapName!="")
	{
		m_pMapName="";
	}
}
BOOL CMMFile::WriteToFile(LPVOID pBuffer,DWORD dwSize)
{
	if(!m_lpFileMapBuffer)return FALSE;
	memcpy(m_lpFileMapBuffer,pBuffer,dwSize);
	return TRUE;
}
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 dwSize)
{
	if(!m_lpFileMapBuffer)return FALSE;
	memcpy(pBuffer,m_lpFileMapBuffer,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;
}
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;
}
void CMMFile::GetSysAllocationGranularity(DWORD* pAllocationGranularity)
{
	SYSTEM_INFO sinf;
	GetSystemInfo(&sinf);
	*pAllocationGranularity=sinf.dwAllocationGranularity;
}
DWORD CMMFile::GetSize()
{
	if(!m_hFile)
		return 0;
	return GetFileSize(m_hFile,NULL);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -