先不说内存映射文件(即一块内存和一个文件相映射对应)是什么。贴个代码先,。
[cpp]
view plain
copy
print
?
#include #include #include #include using namespace std; int main() { //开始 //获得文件句柄 HANDLE hFile=CreateFile( "c:\\test.dat", //文件名 GENERIC_READ|GENERIC_WRITE, //对文件进行读写操作 FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, //打开已存在文件 FILE_ATTRIBUTE_NORMAL, 0); //返回值size_high,size_low分别表示文件大小的高32位/低32位 DWORD size_low,size_high; size_low= GetFileSize(hFile,&size_high); //创建文件的内存映射文件。 HANDLE hMapFile=CreateFileMapping( hFile, NULL, PAGE_READWRITE, //对映射文件进行读写 size_high, size_low, //这两个参数共64位,所以支持的最大文件长度为16EB NULL); if(hMapFile==INVALID_HANDLE_VALUE) { AfxMessageBox("Can't create file mapping.Error%d:\n", GetLastError()); CloseHandle(hFile); return 0; } //把文件数据映射到进程的地址空间 void* pvFile=MapViewOfFile( hMapFile, FILE_MAP_READ|FILE_MAP_WRITE, 0, 0, 0); unsigned char *p=(unsigned char*)pvFile; //至此,就获得了外部文件test.dat在内存地址空间的映射, //下面就可以用指针p"折磨"这个文件了 CString s; p[size_low-1]='!'; p[size_low-2]='X'; //修改该文件的最后两个字节(文件大小
error_code = GetLastError();
cout
CloseHandle(mmHandle);
cout
if
(mmfm == NULL){
if
(mmHandle != INVALID_HANDLE_VALUE){
CloseHandle(mmHandle);
}
}
else
{
//char write_chars[] = "hello chars";
//size_t position = 0;
//DWORD written = 0;
//const size_t write_chars_size = sizeof(write_chars);
//WriteFile(mmHandle,write_chars,write_chars_size,&written,NULL);
size_t
view_size = 1024*256;
DWORD
view_access = FILE_MAP_ALL_ACCESS;
//获得映射视图
char
* mmfm_base_address = (
char
*)MapViewOfFile(mmfm,view_access,0,0,view_size);
if
(mmfm_base_address == NULL){
error_code = GetLastError();
if
(error_code != SUCCESS){
cout |