vc 内存映射文件操作
// TODO: Add extra validation here
//CDialog::OnOK();
CString filename;
HANDLE hNewFile=INVALID_HANDLE_VALUE;
HANDLE hMap=NULL;
HANDLE hlParam=NULL;
LPVOID lpBuffer=0;
filename = "g:\test.txt";
CString ch="打开文件"+filename+"失败!";
try
{
HANDLE hNewFile=CreateFile(filename, GENERIC_READ|
GENERIC_WRITE,0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,NULL);
if(hNewFile==INVALID_HANDLE_VALUE)
throw "创建文件失败!";
HANDLE hMap=CreateFileMapping(hNewFile,NULL,PAGE_READWRITE,0,0,NULL);
// 得到文件尺寸
DWORD dwFileSizeHigh;
__int64 qwFileSize = GetFileSize(hNewFile, &dwFileSizeHigh);
qwFileSize |= (((__int64)dwFileSizeHigh) << 32);
SYSTEM_INFO SysInfo;
GetSystemInfo(&SysInfo);
DWORD dwGran = SysInfo.dwAllocationGranularity;
// 关闭文件对象
//CloseHandle(hMap);
if(hMap==NULL)
throw "创建内存映射文件失败!";
DWORD dwBlockBytes = (DWORD)qwFileSize;
LPBYTE offset = (LPBYTE)MapViewOfFile(hMap,FILE_MAP_ALL_ACCESS,
0,0,dwBlockBytes);
DWORD err = ::GetLastError();
评论12