#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;
}
UnmapViewOfFile(lpMapStartPos); // 撤销第一部分的映射
// 第2部分的文件片段如何映射?
i++;
lpMapStartPos = MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 0);
if ( lpMapStartPos == NULL )
{
printf("映射原文件到内存映射失败:%d。\n",GetLastError());
printf("%d\n",i);
return -1;
}
UnmapViewOfFile(lpMapStartPos);
CloseHandle(hFileMap); // 关闭内存句柄
CloseHandle(hFile); // 关闭文件句柄
}
【 在 javame (yimin) 的大作中提到: 】
: #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); // 增加的代码
: ...................
--
FROM 116.231.61.*