16,548
社区成员




#include "windows.h"
#include<tchar.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
// Open the file that we want to map.
// 注意请在c盘,自己创建一个data.txt文件,并写入内容
HANDLE hFile = ::CreateFile("C:\\data.txt",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
// Create a file-mapping object for the file.
HANDLE hFileMapping = ::CreateFileMapping(hFile,
NULL,
PAGE_WRITECOPY,
0, 0,//映射对象的大小,这个大小不晓得有什么作用,麻烦知道的告诉一下,不胜感激,我也改过10等等一些数字,发现无论改多少都不行,必须为0才行,什么情况呢?
NULL);
PBYTE pbFile = (PBYTE)::MapViewOfFile(hFileMapping, FILE_MAP_COPY, 0,64*1024, 0);//这里很关键,如果改成0,0(最后两个参数)表示起始映射偏移为0,映射整个文件,我这里设置为64*1024是为了验证这个参数必须是系统分配内存粒度的整数倍,从而达到对齐的效果,这也是MSDN中规定的,当然大家测试的时候可以写成0就行,否则你还得找个大于64K的txt文件来测试,挺累的,哈哈,当我把最后那个参数改成8,也就是我只是想映射8个字节,但是运行出错,IDE VC6.0,麻烦大家测试一下,谢谢了先
//cout << pbFile << endl;
FILE *fp;
fp=fopen("xx.txt","w");
//fscanf(fp,"%s",pbFile);
fputs((char *)pbFile,fp);//为了看到结果我故意把输出到了文件中,大家测试的时候可以根据情况
fclose(fp);
::UnmapViewOfFile(pbFile);
::CloseHandle(hFileMapping);
::CloseHandle(hFile);
return 0;
}