和dwBytesInBlock大小没关系,我改成多大都不行……
事实上这个程序只要一写pbFile就会显示0xC0000005: 写入位置 0x00000000 时发生访问冲突
我是想用这个程序测试一下如何用内存映射文件往文件中写入数据,
具体程序如下,麻烦大家再看看啦~
CString str;
str.Format(_T("D:\\test.txt"));
// 创建文件内核对象,其句柄保存于hFile
HANDLE hFile = CreateFile(str,GENERIC_WRITE,FILE_SHARE_WRITE, NULL,CREATE_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL);// 创建文件映射内核对象,句柄保存于hFileMapping
HANDLE hFileMapping = CreateFileMapping(hFile,NULL,PAGE_READWRITE, 0, 0x4000000, NULL);
// 释放文件内核对象
CloseHandle(hFile);// 设定大小、偏移量等参数
__int64 qwFileSize = 0x4000000;
__int64 qwFileOffset = 0;
SYSTEM_INFO sinf;
GetSystemInfo(&sinf);
__int64 T = 600 * sinf.dwAllocationGranularity;
DWORD dwBytesInBlock = 1000 * sinf.dwAllocationGranularity;// 将文件数据映射到进程的地址空间
char* pbFile = (char *)MapViewOfFile(hFileMapping,FILE_MAP_ALL_ACCESS,(DWORD)(qwFileOffset>>32), (DWORD)(qwFileOffset&0xFFFFFFFF), dwBytesInBlock);
char *pBuf = pbFile ;
pBuf = new char [20] ;
pBuf[0] = 'a' ;
memcpy( pbFile, pBuf, 1 );
// FlushViewOfFile(pBuf,20*sizeof(char));
// 从进程的地址空间撤消文件数据映像
UnmapViewOfFile(pbFile);// 关闭文件映射对象
CloseHandle(hFileMapping);