?? memmapfile.cpp
字號:
/////////////////////////////////////////////////////////////////////////////
// MemMapFile.cpp 內存映射的 - 文件操作 ( Memory Mapping File ) //
// CopyRight(C) 1996,2008 TCSY 公司 //
// Pentium Working Room ShanChengKun 2003.10.28 更新 //
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MemMapFile.h"
//===========================================================================
// 執著地按指定大小映射文件,沒有則創建,有則直接打開,覆蓋只讀文件會失敗
//===========================================================================
void * CMemMapFile::CreateNewFile (LPCTSTR szFileName, DWORD dwMaxFileSize)
{
this->UnMapFile () ;
m_hFile = ::CreateFile (szFileName, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ, NULL, CREATE_ALWAYS,
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->UnMapFile () ;
return (void *)m_pMapAddress ;
}
//===========================================================================
// 執著地按指定大小映射文件,沒有則創建,有則直接打開,覆蓋只讀文件會失敗
//===========================================================================
void * CMemMapFile::OpenExistFile (LPCTSTR szFileName, DWORD dwMaxFileSize)
{
this->UnMapFile () ;
m_hFile = ::CreateFile (szFileName, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ, NULL, OPEN_ALWAYS,
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->UnMapFile () ;
return (void *)m_pMapAddress ;
}
//===========================================================================
// 只讀方式打開并映射指定的已經存在的文件,并發的程序可以只讀的方式訪問
//===========================================================================
void * CMemMapFile::OpenReadFile (LPCTSTR szFileName)
{
this->UnMapFile () ;
m_hFile = ::CreateFile (szFileName, GENERIC_READ, FILE_SHARE_READ, 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->UnMapFile () ;
return (void *)m_pMapAddress ;
}
/////////////////////////////////////////////////////////////////////////////
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -