#include <iostream>
#include <Windows.h>
using namespace std;int main()
{
//得到系统页大小
SYSTEM_INFO sinf; 
GetSystemInfo(&sinf); 
DWORD dwAllocationGranularity = sinf.dwAllocationGranularity;  //打开文件,获得文件句柄
HANDLE hFileSource = CreateFile(L"E:\\工作\\CreateHugeFile\\homeSource.txt",GENERIC_READ,FILE_SHARE_READ, NULL,OPEN_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
HANDLE hFileTarget = CreateFile(L"E:\\工作\\CreateHugeFile\\homeTarget.txt",GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ, NULL,OPEN_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL); //获得文件长度
LARGE_INTEGER iFileLen;
BOOL ret = GetFileSizeEx(hFileSource,&iFileLen); if (ret == FALSE)
{
cout << "获取文件长度失败!" << endl;
} __int64 iFileSize = iFileLen.QuadPart; //创建map
HANDLE hFileMappingSource = CreateFileMapping(hFileSource,NULL,PAGE_READONLY, 
(DWORD)(iFileSize>>32), (DWORD)(iFileSize&0xFFFFFF), NULL);  HANDLE hFileMappingTarget = CreateFileMapping(hFileTarget,NULL,PAGE_READWRITE, 
(DWORD)(iFileSize>>32), (DWORD)(iFileSize&0xFFFFFF),NULL);  //关闭文件句柄
CloseHandle(hFileSource);
CloseHandle(hFileTarget);
DWORD offset=64*1024;
DWORD qSourceFileOffset = 0;
DWORD qTargetFileOffset = 0; while (qSourceFileOffset < iFileSize)
{
int rev = 0;
PBYTE pbFileSource = (PBYTE)MapViewOfFile(hFileMappingSource, 
FILE_MAP_READ,(DWORD)(qSourceFileOffset>>32),(DWORD)(qSourceFileOffset&0xFFFFFF),offset); 
PBYTE pbFileTarget = (PBYTE)MapViewOfFile(hFileMappingTarget, 
FILE_MAP_WRITE | FILE_MAP_READ,(DWORD)(qTargetFileOffset>>32),(DWORD)(qTargetFileOffset&0xFFFFFF),offset);  rev =  GetLastError();  if (pbFileSource == NULL)
{
cout << "错误" << endl;
return 1;
}

if( (iFileSize - qTargetFileOffset) < offset )
{
offset = iFileSize - qTargetFileOffset;
} memcpy(pbFileTarget,pbFileSource,offset); qSourceFileOffset += offset;
qTargetFileOffset += offset; UnmapViewOfFile(pbFileSource);
UnmapViewOfFile(pbFileTarget);
} //关闭文件映射内核对象句柄
CloseHandle(hFileMappingSource);
CloseHandle(hFileMappingTarget); return 0;
}
不知道为什么MapViewOfFile第2次访问的时候会出现拒绝访问这个错误?不知道为什么呢?请高手指教下。