#define PartSize 2*1024*1024 // 分块的大小2MB
hFileMap = CreateFileMapping(hFile,NULL,PAGE_READONLY,0,PartSize,NULL);
lpMapStartPos = MapViewOfFile(hFileMap, FILE_MAP_READ, 0, i*PartSize, PartSize); // 增加的代码
if ( lpMapStartPos == NULL )
{
printf("\n映射原文件到内存映射失败:%d。",GetLastError());
return -1;
}
i=0的时候,MapViewOfFile可以映射成功。
i=1的时候,MapViewOfFile可以映射失败,GetLastError()的返回值是5。
=====================
有问题的代码贴在这里。
#include <stdio.h>
#include <windows.h>
#define PartSize 2*1024*1024 // 分块的大小2MB
int main(int argc,char * argv[])
{
HANDLE dstFile;
HANDLE hFileMap,hDstFileMap;
DWORD dwFileSize;
LPVOID lpMapStartPos,lpNewFilePos;
int FileLen;
char ext[256],destfilename[256];
int i = 0;
char *lpFileName = "01.flac";
HANDLE hFile = CreateFile(lpFileName,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hFile == INVALID_HANDLE_VALUE) {
printf("打开原文件失败。\n");
return FALSE;
}
dwFileSize = GetFileSize(hFile, NULL);
hFileMap = CreateFileMapping(hFile,NULL,PAGE_READONLY,0,PartSize,NULL);
if(hFileMap == NULL)
{
printf("创建原文件映射对象句柄失败:%d。\n",GetLastError());
CloseHandle(hFile);
return -1;
}
lpMapStartPos = MapViewOfFile(hFileMap, FILE_MAP_READ, 0, i * PartSize, 0);
if ( lpMapStartPos == NULL )
{
printf("%d\n.",i);
printf("映射原文件到内存映射失败:%d。\n",GetLastError());
return -1;
}
i++;
lpMapStartPos = MapViewOfFile(hFileMap, FILE_MAP_READ, 0, i * PartSize, 0);
if ( lpMapStartPos == NULL )
{
printf("映射原文件到内存映射失败:%d。\n",GetLastError());
printf("%d\n",i);
return -1;
}
UnmapViewOfFile(lpMapStartPos);
CloseHandle(hFileMap); // 关闭内存句柄
CloseHandle(hFile); // 关闭文件句柄
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2020-12-21 13:03
被limee编辑
,原因: