HANDLE hFile = NULL;
HANDLE hFileMaping = NULL;
SYSTEM_INFO sysInfo;
GetSystemInfo(&sysInfo);
DWORD dwPageSize = sysInfo.dwAllocationGranularity;
do
{
hFile = CreateFileW(L"D://pfsvoddata.bbv", GENERIC_READ,
FILE_SHARE_READ, NULL, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE == hFile)
{
break;
}
hFileMaping = CreateFileMappingW(hFile, NULL, PAGE_READONLY, 0, 0,
L"jyytest");
if (NULL == hFileMaping)
{
break;
}
CloseHandle(hFile);
hFile = NULL;
DWORD dwFileHight = 0;;
__int64 n64FileSize = GetFileSize(hFile, &dwFileHight);
n64FileSize += ((__int64) dwFileHight) << 32;
__int64 n64FileMapOffSet = 0;
do
{
DWORD dwMapSize = dwPageSize;
if (dwMapSize > n64FileSize)
{
dwMapSize = (DWORD) n64FileSize;
}
DWORD dwOffsetLow =(DWORD) (n64FileMapOffSet & 0x00000000FFFFFFFF);
DWORD dwOffsetHight = (DWORD) ((n64FileMapOffSet & 0xFFFFFFFF00000000) >> 32);
int *pValue = (int *) MapViewOfFile(hFileMaping, FILE_SHARE_READ,
dwOffsetHight, dwOffsetLow, dwMapSize); //特别要注意一次的 偏移为64K的整数倍
if (NULL == pValue)
{
UnmapViewOfFile(pValue);
break;
}
n64FileMapOffSet += dwMapSize;
n64FileSize -= dwMapSize;
UnmapViewOfFile(pValue);
} while (n64FileSize > 0);
} while (0);
getchar();