代码如下,首次MapViewOfFile返回一个sucessful价值,但在第二次循环时,该值是NULL,错误代码是5,这意味着访问被拒绝。我无法找到哪一部分是错误的,请帮助我,非常感谢!
| yzmcc |理查德MacCutchan:你似乎混淆约所有的各种值被用来在上面指定的文件大小和偏移(我绝对上午)。你也使用强制转换,转换成DWORD值DWORD值,这完全是多余的。在MapViewOfFile()函数调用,你似乎认为dwBlockBytes是64位值,即使你宣布它作为一个DWORD值* 10的dwGran的;你也忽略GetLastError函数()在几个地方,这可能有助于诊断您的问题的结果:查克・奥图尔
HANDLE hFile = CreateFile(fileName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
DWORD error = GetLastError();
if (hFile == NULL || hFile == INVALID_HANDLE_VALUE)
{
CString msg;
msg.Format("handle is wrong锛code is %d!",error);
AfxMessageBox(msg);
return FALSE;
}
m_hFileMapping = CreateFileMapping(hFile,
NULL,PAGE_READONLY,
0,
0,
NULL);
if (m_hFileMapping == NULL)
{
error = GetLastError();
CloseHandle(hFile);
return FALSE;
}
SYSTEM_INFO SysInfo;
GetSystemInfo(&SysInfo);
DWORD dwGran = SysInfo.dwAllocationGranularity;
DWORD dwFileSizeHigh = 0;
m_iFileByteCount = GetFileSize(hFile,&dwFileSizeHigh);
DWORD qwFileOffset = 0;
DWORD dwBlockBytes = dwGran*10;
DWORD qwFileSize = (DWORD)m_iFileByteCount;
LPCVOID lpBaseAdress = NULL;
while (qwFileSize - qwFileOffset> 0)
{
if (qwFileSize-qwFileOffset < dwBlockBytes)
{
dwBlockBytes = (DWORD)(qwFileSize-qwFileOffset);
}
m_pBeginPointer = (BYTE*)MapViewOfFile(m_hFileMapping,
FILE_MAP_READ,
DWORD(dwBlockBytes>>32),
DWORD(dwBlockBytes&0xFFFFFFFF),
dwBlockBytes);
DWORD error = GetLastError();
if (m_pBeginPointer == NULL)
{
CloseHandle(m_hFileMapping);
m_hFileMapping = NULL;
return FALSE;
}
BOOL b = UnmapViewOfFile(m_pBeginPointer);
qwFileOffset += dwBlockBytes;
}
CloseHandle(m_hFileMapping);