📄 filemapping.cpp
字号:
// FileMapping.cpp: implementation of the CFileMapping class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "FileMapping.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CFileMapping::CFileMapping()
{
m_hFile = INVALID_HANDLE_VALUE;
m_hMapFile = NULL;
m_lpData = NULL;
}
CFileMapping::~CFileMapping()
{
if (m_lpData != NULL)
{
UnmapViewOfFile(m_lpData);
}
if (m_hMapFile != NULL)
{
CloseHandle(m_hMapFile);
}
if (m_hFile != INVALID_HANDLE_VALUE)
{
CloseHandle(m_hFile);
}
}
/////////////////////////////////////////////////////////////////////////
//函数名称:LoadFile
//函数功能:------将指定文件映射入内存中--------
//入口参数:const char * argFileName----------要映射入内存的文件名
//出口参数:无
//返回值:int-----------FILE_MAP_OK表示操作成功,FILE_MAP_FAILED表示操作失败
//开发人员:杨军
//开发日期:2004-5-5
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CFileMapping::LoadFile(const char * argFileName)
{
DWORD dwAttribute = GetFileAttributes(argFileName);
if (0xFFFFFFFF == dwAttribute)
{
goto LoadFile_Failed;
}
//将文件的属性设为档案类型以便于处理
SetFileAttributes(argFileName, FILE_ATTRIBUTE_ARCHIVE);
m_hFile = CreateFile(argFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL);
//恢复文件的属性
SetFileAttributes(argFileName, dwAttribute);
if (INVALID_HANDLE_VALUE == m_hFile)
{
goto LoadFile_Failed;
}
//获得文件的大小
m_dwSize = GetFileSize(m_hFile, NULL);
if (0xFFFFFFFF == m_dwSize)
{
goto LoadFile_Opened_Failed;
}
//创建文件句柄映射对象的句柄
m_hMapFile = CreateFileMapping(m_hFile, NULL, PAGE_READONLY, 0, 0, NULL);
if (NULL == m_hMapFile)
{
goto LoadFile_Opened_Failed;
}
//将映射击对象所指向的文件映射入内存
m_lpData = MapViewOfFile(m_hMapFile, FILE_MAP_READ, 0, 0, 0);
if (NULL == m_lpData)
{
goto LoadFile_Mapped_Failed;
}
return FILE_MAP_OK;
LoadFile_Mapped_Failed:
CloseHandle(m_hMapFile);
LoadFile_Opened_Failed:
CloseHandle(m_hFile);
LoadFile_Failed:
return FILE_MAP_FAILED;
}
/////////////////////////////////////////////////////////////////////////
//函数名称:UnloadFile
//函数功能:------将映射到内存中的文件卸去------
//入口参数:无
//出口参数:无
//返回值:int-----------FILE_MAP_OK表示操作成功,FILE_MAP_FAILED表示操作失败
//开发人员:杨军
//开发日期:2004-5-5
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CFileMapping::UnloadFile()
{
UnmapViewOfFile(m_lpData);
CloseHandle(m_hMapFile);
CloseHandle(m_hFile);
m_lpData = NULL;
m_hMapFile = NULL;
m_hFile = INVALID_HANDLE_VALUE;
return FILE_MAP_OK;
}
/////////////////////////////////////////////////////////////////////////
//函数名称:GetMapFileBase
//函数功能:------获得文件映射到内存中的起始地址---
//入口参数:无
//出口参数:无
//返回值:非NULL表示实际的起始地址,NULL的话表示当前没有成功映射文件!
//开发人员:杨军
//开发日期:2004-5-5
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
LPVOID CFileMapping::GetMapFileBase()
{
return m_lpData;
}
/////////////////////////////////////////////////////////////////////////
//函数名称:CreateSharedMapFile
//函数功能:------创建共享信息用的内存映射文件----
//入口参数:const char * argMapName-------要创建的映射文件名
// unsigned int argSize----------共享区域的大小
//出口参数:无
//返回值:int-----------FILE_MAP_OK表示操作成功,FILE_MAP_FAILED表示操作失败
//开发人员:杨军
//开发日期:2004-5-11
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CFileMapping::CreateSharedMapFile(const char * argMapName, unsigned int argSize)
{
m_hMapFile = CreateFileMapping((HANDLE)0xffffffff, NULL, PAGE_READWRITE, 0, argSize, argMapName);
if (NULL == m_hMapFile)
{
goto CreateSharedMapFile_Failed;
}
//将映射对象映射入内存
m_lpData = MapViewOfFile(m_hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0);
if (NULL == m_lpData)
{
goto CreateSharedMapFile_Mapped_Failed;
}
return FILE_MAP_OK;
CreateSharedMapFile_Mapped_Failed:
CloseHandle(m_hMapFile);
CreateSharedMapFile_Failed:
return FILE_MAP_FAILED;
}
/////////////////////////////////////////////////////////////////////////
//函数名称:CloseSharedMapFile
//函数功能:------关闭共享信息用的内存映射文件----
//入口参数:无
//出口参数:无
//返回值:int-----------FILE_MAP_OK表示操作成功,FILE_MAP_FAILED表示操作失败
//开发人员:杨军
//开发日期:2004-5-11
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CFileMapping::CloseSharedMapFile()
{
::UnmapViewOfFile(m_lpData);
::CloseHandle(m_hMapFile);
m_lpData = NULL;
m_hMapFile = NULL;
m_hFile = INVALID_HANDLE_VALUE;
return FILE_MAP_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -