memmapfile.cpp

来自「LZW和rle算法的实现及其演示例子源码」· C++ 代码 · 共 70 行

CPP
70
字号
#include "stdafx.h"
#include "MemMapFile.h"

//===================================================================
void * FCMemMapFile::ReadFile (LPCTSTR szFileName, DWORD dwShare)
{
	this->UnMap () ;
	m_hFile = ::CreateFile (szFileName, GENERIC_READ, dwShare, NULL,
							OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL) ;
	if (m_hFile == INVALID_HANDLE_VALUE)
		return NULL ;

	m_hFileMap = ::CreateFileMapping (m_hFile, NULL, PAGE_READONLY, 0, 0, NULL) ;
	if (m_hFileMap == NULL)
	{
		::CloseHandle (m_hFile) ;
		m_hFile = INVALID_HANDLE_VALUE ;
		return NULL ;
	}
	m_pMapAddress = ::MapViewOfFile (m_hFileMap, FILE_MAP_READ, 0, 0, 0) ;
	if (m_pMapAddress == NULL)
		this->UnMap () ;
	return (void *)m_pMapAddress ;
}
//===================================================================

void * FCMemMapFile::CreateFile (LPCTSTR szFileName, DWORD dwMaxFileSize, bool bOverWrite, DWORD dwShare)
{
	this->UnMap () ;
	m_hFile = ::CreateFile (szFileName, GENERIC_READ | GENERIC_WRITE, dwShare, NULL,
							bOverWrite ? CREATE_ALWAYS : CREATE_NEW,
							FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL) ;
	if (m_hFile == INVALID_HANDLE_VALUE)
		return NULL ;

	m_hFileMap = ::CreateFileMapping (m_hFile, NULL, PAGE_READWRITE, 0, dwMaxFileSize, NULL) ;
	if (m_hFileMap == NULL)
	{
		::CloseHandle (m_hFile) ;
		m_hFile = INVALID_HANDLE_VALUE ;
		return NULL ;
	}
	m_pMapAddress = ::MapViewOfFile (m_hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, 0) ;
	if (m_pMapAddress == NULL)
		this->UnMap () ;
	return (void *)m_pMapAddress ;
}
//===================================================================
void * FCMemMapFile::ModifyFile (LPCTSTR szFileName, DWORD dwMaxFileSize, DWORD dwShare)
{
	this->UnMap () ;
	m_hFile = ::CreateFile (szFileName, GENERIC_READ | GENERIC_WRITE, dwShare, NULL,
							OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL) ;
	if (m_hFile == INVALID_HANDLE_VALUE)
		return NULL ;

	m_hFileMap = ::CreateFileMapping (m_hFile, NULL, PAGE_READWRITE, 0, dwMaxFileSize, NULL) ;
	if (m_hFileMap == NULL)
	{
		::CloseHandle (m_hFile) ;
		m_hFile = INVALID_HANDLE_VALUE ;
		return NULL ;
	}
	m_pMapAddress = ::MapViewOfFile (m_hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, 0) ;
	if (m_pMapAddress == NULL)
		this->UnMap () ;
	return (void *)m_pMapAddress ;
}
//===================================================================

⌨️ 快捷键说明

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