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

📄 memmapfile.h

📁 一个国人自己实现图像库的程序(有参考价值)
💻 H
字号:
//////////////////////////////////////////////////////////////////
//																//
//		用途 : 内存映射的 - 文件操作 ( Memory Mapping File )	//
//		创建 : [Foolish] / 2001-4-19							//
//		更新 : 2002-7-25										//
//		主页 : http://crazybit.topcities.com/					//
//		邮箱 : crazybit@263.net									//
//									(c) 1999 - 2002 =USTC= 付黎	//
//////////////////////////////////////////////////////////////////
#ifndef		__FOO_MEMMAPFILE_H__
#define		__FOO_MEMMAPFILE_H__
#include <windows.h>
#pragma once

//===================================================================
//	Declaration
//===================================================================
class FCMemMapFile
{
public :
	FCMemMapFile () ;
	~FCMemMapFile () ;
	void	UnMap () ;

	/*************************************************************/
	/*				 覆盖只读文件会失败							 */
	/*************************************************************/
	void *	CreateFile (PCTSTR szFileName,
						DWORD dwMaxFileSize,
						bool bOverWrite = false,
						DWORD dwShare = FILE_SHARE_READ) ;

	/*************************************************************/
	/*			 读取文件长度为0的文件会失败					 */
	/*************************************************************/
	void *	ReadFile (PCTSTR szFileName,
					  DWORD dwShare = FILE_SHARE_READ) ;

	/*************************************************************/
	/*			 读取文件长度为0的文件会失败					 */
	//	dwMaxFileSize == 0 表示不改变文件大小					 */
	//	dwMaxFileSize小于文件长度,则不改变大小,否则以0填充	 */
	/*************************************************************/
	void *	ModifyFile (PCTSTR szFileName,
						DWORD dwMaxFileSize = 0,
						DWORD dwShare = FILE_SHARE_READ) ;

	HANDLE	GetFileHandle () const ;
	HANDLE	GetMappingHandle () const ;
	void *	GetBaseAddress () const ;
	void	FlushFile () const ;
	void	SetSize (DWORD dwFileSize) ; // 此函数的调用必须放在最后

protected :
	HANDLE		m_hFile ;
	HANDLE		m_hFileMap ;
	VOID	  * m_pMapAddress ;
} ;

//===================================================================
//	Implement
//===================================================================
inline FCMemMapFile::FCMemMapFile () {
	m_hFile = INVALID_HANDLE_VALUE ;
	m_hFileMap = NULL ;
	m_pMapAddress = NULL ;
}
inline FCMemMapFile::~FCMemMapFile () {
	this->UnMap () ;
}
inline HANDLE FCMemMapFile::GetFileHandle () const {
	return m_hFile ;
}
inline HANDLE FCMemMapFile::GetMappingHandle () const {
	return m_hFileMap ;
}
inline void * FCMemMapFile::GetBaseAddress () const {
	return m_pMapAddress ;
}
inline void FCMemMapFile::FlushFile () const {
	if (m_pMapAddress != NULL)
		::FlushViewOfFile (m_pMapAddress, 0) ;
}
inline void FCMemMapFile::UnMap () {
	if (m_pMapAddress != NULL)				::UnmapViewOfFile (m_pMapAddress) ;
	if (m_hFileMap != NULL)					CloseHandle (m_hFileMap) ;
	if (m_hFile != INVALID_HANDLE_VALUE)	CloseHandle (m_hFile) ;
	m_hFile = INVALID_HANDLE_VALUE ;
	m_hFileMap = NULL ;
	m_pMapAddress = NULL ;
}
inline void FCMemMapFile::SetSize (DWORD dwFileSize) {
	if (m_pMapAddress != NULL)		::UnmapViewOfFile (m_pMapAddress) ;
	if (m_hFileMap != NULL)			CloseHandle (m_hFileMap) ;
	if (m_hFile != INVALID_HANDLE_VALUE) {
		::SetFilePointer (m_hFile, dwFileSize, NULL, FILE_BEGIN) ;
		::SetEndOfFile (m_hFile) ;
		CloseHandle (m_hFile) ;
	}
	m_hFile = INVALID_HANDLE_VALUE ;
	m_hFileMap = NULL ;
	m_pMapAddress = NULL ;
}

#endif

⌨️ 快捷键说明

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