?? memmapfile.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 + -