?? mmfile.cpp
字號:
// MMFile.cpp: implementation of the CMMFile class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MMFile.h"
CMMFile::CMMFile(BOOL autoDelete)
{
m_autoDelete=autoDelete;
m_hFile=NULL;
m_hFileMap=NULL;
m_lpFileMapBuffer=NULL;
m_pFileName="";
m_pMapName="";
m_dwSize=0;
}
CMMFile::~CMMFile()
{
Destroy();
}
void CMMFile::Destroy()
{
if(m_lpFileMapBuffer)
{
UnmapViewOfFile(m_lpFileMapBuffer);
m_lpFileMapBuffer=NULL;
}
if(m_hFileMap)
{
CloseHandle(m_hFileMap);
m_hFileMap=NULL;
}
if(m_hFile&&m_hFile!=INVALID_HANDLE_VALUE)
{
CloseHandle(m_hFile);
m_hFile=NULL;
}
if(m_pFileName!="")
{
if(m_autoDelete)
DeleteFile(m_pFileName);
m_pFileName="";
}
if(m_pMapName!="")
{
m_pMapName="";
}
}
BOOL CMMFile::WriteToFile(LPVOID pBuffer,DWORD dwSize)
{
if(!m_lpFileMapBuffer)return FALSE;
memcpy(m_lpFileMapBuffer,pBuffer,dwSize);
return TRUE;
}
BOOL CMMFile::WriteToFile(LPVOID pBuffer,DWORD dwOffsetAddr,DWORD dwSize)
{
if(!m_lpFileMapBuffer)return FALSE;
memcpy((BYTE*)m_lpFileMapBuffer+dwOffsetAddr,pBuffer,dwSize);
return TRUE;
}
BOOL CMMFile::ReadFromFile(LPVOID pBuffer,DWORD dwSize)
{
if(!m_lpFileMapBuffer)return FALSE;
memcpy(pBuffer,m_lpFileMapBuffer,dwSize);
return TRUE;
}
BOOL CMMFile::ReadFromFile(LPVOID pBuffer,DWORD dwOffsetAddr,DWORD dwSize)
{
if(!m_lpFileMapBuffer)return FALSE;
memcpy(pBuffer,(BYTE*)m_lpFileMapBuffer+dwOffsetAddr,dwSize);
return TRUE;
}
BOOL CMMFile::OpenMem(LPCTSTR szFileName, LPCTSTR szMapName, DWORD dwSize)
{
if(m_lpFileMapBuffer)return TRUE;
m_pFileName=szFileName;
m_pMapName=szMapName;
m_dwSize=dwSize;
m_hFileMap=OpenFileMapping(FILE_MAP_ALL_ACCESS,TRUE,m_pMapName);
if((!m_hFileMap)||(m_hFileMap==INVALID_HANDLE_VALUE))
{
if((!m_hFile)||(m_hFile==INVALID_HANDLE_VALUE))
{
if(dwSize==0)
{
m_hFile=CreateFile(m_pFileName,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if((!m_hFile)||(m_hFile==INVALID_HANDLE_VALUE))
{
return FALSE;
}
}
else
{
m_hFile=CreateFile(m_pFileName,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if((!m_hFile)||(m_hFile==INVALID_HANDLE_VALUE))
{
return FALSE;
}
}
}
m_hFileMap=CreateFileMapping(m_hFile,NULL,PAGE_READWRITE,0,m_dwSize,m_pMapName);
if((!m_hFileMap)||(m_hFileMap==INVALID_HANDLE_VALUE))
{
CloseHandle(m_hFile);
return FALSE;
}
}
if(!(m_lpFileMapBuffer=MapViewOfFile(m_hFileMap,FILE_MAP_ALL_ACCESS,0,0,m_dwSize)))
{
DWORD ER=GetLastError();
return FALSE;
}
return TRUE;
}
BOOL CMMFile::OpenNewMem(LPCTSTR szFileName, LPCTSTR szMapName, DWORD dwSize)
{
HANDLE hTmpFile;
hTmpFile=CreateFile(m_pFileName,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hTmpFile)
{
CloseHandle(hTmpFile);
DeleteFile(m_pFileName);
}
return OpenMem(szFileName,szMapName,dwSize);
}
BOOL CMMFile::CloseMem()
{
if(m_lpFileMapBuffer)
{
UnmapViewOfFile(m_lpFileMapBuffer);
m_lpFileMapBuffer=NULL;
return TRUE;
}
else
return FALSE;
}
void CMMFile::GetSysAllocationGranularity(DWORD* pAllocationGranularity)
{
SYSTEM_INFO sinf;
GetSystemInfo(&sinf);
*pAllocationGranularity=sinf.dwAllocationGranularity;
}
DWORD CMMFile::GetSize()
{
if(!m_hFile)
return 0;
return GetFileSize(m_hFile,NULL);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -