WinCE5.0内存映射文件操作的疑惑
WinCE5.0内存映射文件操作的疑惑,
有这么一段程序:
// 设定内存映射大小、偏移量等参数__int64 qwFileSize = 0xD59F80;//文件的最大字节数13.3MB(0xD59F80)/64MB(0x4000000)/128MB(0x8000000)__int64 qwFileOffset = 0; //偏移量__int64 T = 0; //阀值DWORD dwBytesInBlock = 0; //每次映射的内存大小__int64 qwLogFileSize = 0; //日志文件的字节数//WinCE推荐使用CreateFileForMapping()替代CreateFile()来创建/打开用于内存映射访问的文件 hFile = CreateFileForMapping(_T("\\Storage Card\\MessageA1")/*path + _T("\\Log.txt")*/,GENERIC_READ/*|GENERIC_WRITE*/,FILE_SHARE_READ/*|FILE_SHARE_WRITE*/,NULL,OPEN_EXISTING/*OPEN_ALWAYS*/,FILE_ATTRIBUTE_READONLY/*FILE_ATTRIBUTE_ARCHIVE*/,NULL); if(hFile == NULL) { MessageBox(_T("无法创建临时日志文件!\r\n请联系服务提供商!"),_T("ABC"),MB_ICONEXCLAMATION | MB_ICONWARNING | MB_ICONEXCLAMATION); return; } //创建一个文件映射内核对象 hMapFile = CreateFileMapping(hFile, // Current file handle. NULL, // Default security. PAGE_READONLY, // Read ONLY // PAGE_READWRITE(Read/write permission). 0, // 文件的最大字节数高32位 qwFileSize, // 文件的最大字节数低32位(此处为13.3MB) NULL); if(hMapFile == NULL) { MessageBox(_T("创建临时日志文件映射对象失败,错误代码!\r\n请联系服务提供商!"),_T("ABC"),MB_ICONEXCLAMATION | MB_ICONWARNING | MB_ICONEXCLAMATION); CloseHandle(hMapFile); return; } //获取部分映射文件视图,在映射时,需要指定映射区域的开始位置qwFileOffset以及映射区域的大小dwBytesInBlock[0表示这个文件映射] lpMapView = (PBYTE)MapViewOfFile(hMapFile,FILE_MAP_READ/*FILE_MAP_WRITE*/,(DWORD)(qwFileOffset>>32),(DWORD)(qwFileOffset&0xFFFFFFFF),qwFileSize); if(lpMapView == NULL) { MessageBox(_T("映射临时日志文件视图失败,错误代码:1\r\n请联系服务提供商!"),_T("ABC"),MB_ICONEXCLAMATION | MB_ICONWARNING | MB_ICONEXCLAMATION); CloseHandle(hFile); CloseHandle(hMapFile); return; }