HANDLE hFile = NULL;HANDLE hFileMap = NULL;const viewmapsize = 8 * 1024 * 1024;//8mDWORD highsize,lowsize,fileoffsetlow,fileoffsethigh,mapsize;_int64 filesize,offset,remain;int dwError;do {//打开文件hFile= CreateFile("g:\\1289527402.png",GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if ( hFile == INVALID_HANDLE_VALUE ){CString cs;cs.Format("打开文件失败:%d",GetLastError());AfxMessageBox(cs);break;}lowsize = GetFileSize(hFile,&highsize);if ( lowsize == 0xFFFFFFFF && ( dwError = GetLastError() ) != NO_ERROR ){CString cs;cs.Format("获取文件大小失败:%d",dwError);AfxMessageBox(cs);break;}//文件大小filesize = highsize<<32 lowsize="" hfilemap="CreateFileMapping(hFile,NULL," page_readonly="" highsize="" lowsize="" null="" if="" hfilemap="=" null="" cstring="" cs="" cs="" format="" createfilemapping="" :="" d="" getlasterror="" afxmessagebox="" cs="" break="" offset="0;" mapsize="(int)(filesize"> viewmapsize ? viewmapsize : filesize);fileoffsethigh = (int)(offset >> 32);fileoffsetlow = (int)(offset / viewmapsize * viewmapsize);LPVOID lpmap;while ( filesize > offset && ( lpmap = MapViewOfFile(hFileMap,FILE_MAP_READ,fileoffsethigh,fileoffsetlow,mapsize) ) != NULL ){offset += mapsize;remain = filesize - offset;mapsize = (int)(remain > viewmapsize ? viewmapsize : remain);fileoffsethigh = (int)(offset >> 32);fileoffsetlow = (int)(offset);UnmapViewOfFile(lpmap);}if ( lpmap == NULL ){CString cs;cs.Format("建立MapViewOfFile失败:%d",GetLastError());AfxMessageBox(cs);break;}elseUnmapViewOfFile(lpmap);if ( filesize == offset )AfxMessageBox("映射文件结束");}while (0);if ( hFileMap )CloseHandle(hFileMap);if (hFile)CloseHandle(hFile);

C++ 内存映射的更多相关文章

  1. 内存映射文件MemoryMappedFile使用

    参考资料: http://blog.csdn.net/bitfan/article/details/4438458 所谓内存映射文件,其实就是在内存中开辟出一块存放数据的专用区域,这区域往往与硬盘上特 ...

  2. JAVA NIO FileChannel 内存映射文件

      文件通道总是阻塞式的. 文件通道不能创建,只能通过(RandomAccessFile.FileInputStream.FileOutputStream)getChannel()获得,具有与File ...

  3. Python之mmap内存映射模块(大文本处理)说明

    背景: 通常在UNIX下面处理文本文件的方法是sed.awk等shell命令,对于处理大文件受CPU,IO等因素影响,对服务器也有一定的压力.关于sed的说明可以看了解sed的工作原理,本文将介绍通过 ...

  4. 使用ZwMapViewOfSection创建内存映射文件总结

    标 题: [原创]使用ZwMapViewOfSection创建内存映射文件总结 作 者: 小覃 时 间: 2012-06-15,02:28:36 链 接: http://bbs.pediy.com/s ...

  5. C#大文件读取和查询--内存映射

    笔者最近需要快速查询日志文件,文件大小在4G以上. 需求如下: 1.读取4G左右大小的文件中的指定行,程序运行占用内存不超过500M. 2.希望查询1G以内容,能控制在20s左右. 刚开始觉得这个应该 ...

  6. 用C#实现的内存映射

    当文件过大时,无法一次性载入内存时,就需要分次,分段的载入文件 主要是用了以下的WinAPI LPVOID MapViewOfFile(HANDLE hFileMappingObject, DWORD ...

  7. 【转】C#大文件读取和查询--内存映射

    笔者最近需要快速查询日志文件,文件大小在4G以上. 需求如下: 1.读取4G左右大小的文件中的指定行,程序运行占用内存不超过500M. 2.希望查询1G以内容,能控制在20s左右. 刚开始觉得这个应该 ...

  8. Atitit.病毒木马的快速扩散机制原理nio 内存映射MappedByteBuffer

    Atitit.病毒木马的快速扩散机制原理nio 内存映射MappedByteBuffer 1. Java NIO(New Input/Output)1 1.1. 变更通知(因为每个事件都需要一个监听者 ...

  9. Java中用内存映射处理大文件

    在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如 ...

  10. linux编程之内存映射

    一.概述                                                   内存映射是在调用进程的虚拟地址空间创建一个新的内存映射. 内存映射分为2种: 1.文件映射 ...

随机推荐

  1. Linux CentOS7 VMware 安装软件包的三种方法、rpm包介绍、rpm工具用法、yum工具用法、yum搭建本地仓库

    一.安装软件包的三种方法 Linux下游三种安装方法,rpm工具.yum工具.源码包.rpm按装一个程序包时,有可能因为该程序包依赖另一个程序包而无法安装:yum工具,可以连同依赖的程序包一起安装. ...

  2. xcode 6 如何将 模拟器(simulator) for iphone/ipad 转变成 simulator for iphone

    xcode 6默认模拟器是iphone/ipad通用的,如果想只针对iphone或者ipad可以进行如下设置: 1.修改模拟器大小(非必须) 模拟器->WIndow->scale-> ...

  3. HDU 5045 状压DP 上海网赛

    比赛的时候想的是把n个n个的题目进行状压 但这样不能讲究顺序,当时精神面貌也不好,真是挫死了 其实此题的另一个角度就是一个n个数的排列,如果我对n个人进行状压,外面套一个按题目循序渐进的大循环,那么, ...

  4. sqlserver查找断号,回收单据号

    declare @L varchar(20), @R varchar(20), @Len int, @FromNo int, @F1 intselect @L='19011', @R='', @Len ...

  5. java多线程知识回顾(笔记)

    线程创建的方式 有两种 第一种是继承Thread类 重写run方法 (个人偏向这一种实际中这种用的较多) 例如 public class MyThead extends Thread { int j= ...

  6. 搜索await page.waitForSelector(allResultsSelector);

    /** * Copyright 2017 Google Inc. All rights reserved. * * Licensed under the Apache License, Version ...

  7. jdk环境变量、maven环境变量、Mysql环境变量配置

    jdk官网地址:http://www.oracle.com/index.htmlhttp://www.java.sun.com 一.配置 jdk环境变量1.新建JAVA_HOME,在变量值复制JDK安 ...

  8. 从MSSQL表中删除重复项

    declare @ids int=1 declare @count int while @ids<471 begin select @count=COUNT(*) From LotNO wher ...

  9. 京东云与AI 10 篇论文被AAAI 2020 收录,京东科技实力亮相世界舞台

    美国时间2月7-12日,AAAI 2020大会在纽约正式拉开序幕,AAAI作为全球人工智能领域的顶级学术会议,每年评审并收录来自全球最顶尖的学术论文,这些学术研究引领着技术的趋势和未来.京东云与AI在 ...

  10. NO12 useradd-passwd-uname-hostname命令-上传rz下载sz-批量部署- Linux用户相关操作

    24 useradd    #添加用户                        语法:useradd 用户名  例子:ueradd oldboy .25 passwd     #为用户设置或修改 ...