📄 memmapfile.h
字号:
/////////////////////////////////////////////////////////////////////////////
// //
// 用途 : 内存映射的 - 文件操作 ( Memory Mapping File ) //
// 创建 : [sck007] / 2003-03-27 //
// 更新 : 2003-10-28 //
// 主页 : www.tcsy.net //
// 邮箱 : sck007@163.com //
// (c) 1996 - 2008 =TCSY= 单成坤 //
/////////////////////////////////////////////////////////////////////////////
#ifndef __SCK_MEMMAPFILE_H__
#define __SCK_MEMMAPFILE_H__
#pragma once
//===========================================================================
// Declaration
//===========================================================================
// 内存映射失败信息:相关指针或句柄为NULL或无效
class CMemMapFile
{
protected :
HANDLE m_hFile ;
HANDLE m_hFileMap ;
VOID * m_pMapAddress ;
void UnMapFile () ;
public :
CMemMapFile () ;
~CMemMapFile () ;
BYTE * GetMapPtr (void) ;
DWORD GetFileSize (void) ;
/*************************************************************/
/* 覆盖只读文件会失败,确认创建 */
/*************************************************************/
void * CreateNewFile (LPCTSTR szFileName, DWORD dwMaxFileSize) ;
void * OpenExistFile (LPCTSTR szFileName, DWORD dwMaxFileSize) ;
/*************************************************************/
/* 读取文件长度为0的文件会失败,只读 */
/*************************************************************/
void * OpenReadFile (LPCTSTR szFileName);
/*************************************************************/
/* 按定值设置最终文件大小,结束映射,并关闭文件 */
/*************************************************************/
void CloseSizeFile (DWORD dwFileSize) ;
} ;
//===========================================================================
// Implement
//===========================================================================
// 默认构造函数
inline CMemMapFile::CMemMapFile ()
{
m_hFile = INVALID_HANDLE_VALUE ;
m_hFileMap = NULL ;
m_pMapAddress = NULL ;
}
// 默认析构函数
inline CMemMapFile::~CMemMapFile ()
{
this->UnMapFile () ;
}
// 当前文件是否可用:返回映象首指针
inline BYTE * CMemMapFile::GetMapPtr (void)
{
return ((BYTE *)m_pMapAddress) ;
}
// 获取文件大小
inline DWORD CMemMapFile::GetFileSize (void)
{
return (m_hFile==INVALID_HANDLE_VALUE ? 0 : ::GetFileSize(m_hFile, NULL));
}
// 结束映射,并关闭文件,它保持原来打开时的文件大小,不改变它
inline void CMemMapFile::UnMapFile ()
{
if (m_pMapAddress != NULL) ::UnmapViewOfFile (m_pMapAddress) ;
if (m_hFileMap != NULL) CloseHandle (m_hFileMap) ;
if (m_hFile != INVALID_HANDLE_VALUE) CloseHandle (m_hFile) ;
m_pMapAddress = NULL ;
m_hFileMap = NULL ;
m_hFile = INVALID_HANDLE_VALUE ;
}
// 主动确认设置新大小,并关闭。该文件要能读写操作。它的调用必须放在最后
inline void CMemMapFile::CloseSizeFile (DWORD dwFileSize)
{
if (m_pMapAddress != NULL) ::UnmapViewOfFile (m_pMapAddress) ;
if (m_hFileMap != NULL) CloseHandle (m_hFileMap) ;
m_pMapAddress = NULL ;
m_hFileMap = NULL ;
if (m_hFile != INVALID_HANDLE_VALUE)
{
::SetFilePointer (m_hFile, dwFileSize, NULL, FILE_BEGIN) ;
::SetEndOfFile (m_hFile) ;
}
this->UnMapFile () ;
}
/////////////////////////////////////////////////////////////////////////////
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -