返回首页

代码如下,首次MapViewOfFile返回一个sucessful价值,但在第二次循环时,该值是NULL,错误代码是5,这意味着访问被拒绝。我无法找到哪一部分是错误的,请帮助我,非常感谢!


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);  

| yzmcc |理查德MacCutchan:你似乎混淆约所有的各种值被用来在上面指定的文件大小和偏移(我绝对上午)。你也使用强制转换,转换成DWORD值DWORD值,这完全是多余的。在MapViewOfFile()函数调用,你似乎认为dwBlockBytes是64位值,即使你宣布它作为一个DWORD值* 10的dwGran的;你也忽略GetLastError函数()在几个地方,这可能有助于诊断您的问题的结果:查克・奥图尔

回答