文件映射

FileMap.h
#include "..includeerror_type.h"
#include <string>
#include <iostream>
#include <windows.h>

using namespace std;

class FileMap
{
public:
	FileMap(const string& path, const string& name);
	~FileMap();
	file_map_crate_mode GetMapMode();
	void TextData();

private:
	HANDLE					m_hFile;
	HANDLE					m_hFileMapping;
	PBYTE					m_pMapBase;
	string					m_path;
	string					m_name;
	file_map_crate_mode		m_craete_mode;
};

FileMap.cpp

#include "FileMap.h"
FileMap::FileMap(const string& path, const string& name)
{
	DWORD nRet = error_ok;
	m_craete_mode = file_map_open;
	m_hFileMapping = OpenFileMappingA(FILE_MAP_READ, FALSE, name.c_str());
	if(NULL == m_hFileMapping)
	{
		m_craete_mode = file_map_create;
		cout << "open file maping failed. creating file mapping ->" << name << endl; 
		m_hFile = CreateFileA(path.c_str(), GENERIC_READ, PAGE_READONLY, NULL, OPEN_EXISTING, NULL, NULL);
		if(INVALID_HANDLE_VALUE == m_hFile)
		{
			cout << "create file failed." << GetLastError() << endl;
			nRet = error_create_file;
		}
		else
		{
			DWORD nSize = 0;
			nSize = GetFileSize(m_hFile, NULL);
			m_hFileMapping = CreateFileMappingA(m_hFile, NULL, PAGE_READONLY, 0, nSize, name.c_str());
			if(NULL == m_hFileMapping)
			{
				cout << "create file mapping failed.
";
				nRet = error_create_file_mapping;
			}
		}
	}
	else
	{
		cout << "open file mapping success.
";
	}
	if (NULL != m_hFileMapping)
	{
		m_name = name;
		m_path = path;
		m_pMapBase = (PBYTE)MapViewOfFile(m_hFileMapping, FILE_MAP_READ, 0, 0, 0);
	}
}


file_map_crate_mode FileMap::GetMapMode()
{
	return m_craete_mode;
}

void FileMap::TextData()
{
	cout << "
file map data:
";
	cout << m_pMapBase << endl;
}

FileMap::~FileMap()
{
	UnmapViewOfFile(m_pMapBase);
	CloseHandle(m_hFileMapping);
	CloseHandle(m_hFile);
}



main.cpp

#include "FileMap.h"

int main(int argc, char* argv[])
{
	if(argc >=3)
	{
		FileMap map1(argv[1], argv[2]);
		map1.TextData();
	}
	else
	{
		cout << "usage:pro.exe shr_name shr_path" << endl;
	}
	system("pause");
	return 0;
}


原文地址:https://www.cnblogs.com/arbboter/p/4225203.html