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

📄 memmapfile.h

📁 通用的扫描仪测试接口
💻 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 + -