Windows Mobile内存映射文件
最近做的一个项目涉及到海量文件的读取,可能会超过4G,所以考虑用了内存映射文件,创建文件视图代码如下:
#ifdef WIN32
m_hFile = CreateFile(FileName, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL );
#else
m_hFile = ::CreateFileForMapping(FileName, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
#endif
if(INVALID_HANDLE_VALUE == m_hFile) return FALSE;
DWORD dwFileSizeHigh;
m_nFileSize = ::GetFileSize(m_hFile, &dwFileSizeHigh);
m_nFileSize += (((__int64) dwFileSizeHigh) << 32);
m_hMapping = ::CreateFileMapping( m_hFile, NULL, PAGE_READWRITE,
(DWORD)(m_nFileSize >> 32), (DWORD)nFileSize , NULL );
测试中发现在PC上面没问题,可以映射1G以上的文件,在PPC2003的模拟器上能映射大概256M的文件,在mobile 5.0的模拟器和机器上都只能映射不超过“程序内存”大小的文件。
问题出在这句话上面:m_hMapping = ::CreateFileMapping( m_hFile, NULL, PAGE_READWRITE,
(DWORD)(m_nFileSize >> 32), (DWORD)nFileSize , NULL );