C++ 内存映射
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++ 内存映射的更多相关文章
- 内存映射文件MemoryMappedFile使用
参考资料: http://blog.csdn.net/bitfan/article/details/4438458 所谓内存映射文件,其实就是在内存中开辟出一块存放数据的专用区域,这区域往往与硬盘上特 ...
- JAVA NIO FileChannel 内存映射文件
文件通道总是阻塞式的. 文件通道不能创建,只能通过(RandomAccessFile.FileInputStream.FileOutputStream)getChannel()获得,具有与File ...
- Python之mmap内存映射模块(大文本处理)说明
背景: 通常在UNIX下面处理文本文件的方法是sed.awk等shell命令,对于处理大文件受CPU,IO等因素影响,对服务器也有一定的压力.关于sed的说明可以看了解sed的工作原理,本文将介绍通过 ...
- 使用ZwMapViewOfSection创建内存映射文件总结
标 题: [原创]使用ZwMapViewOfSection创建内存映射文件总结 作 者: 小覃 时 间: 2012-06-15,02:28:36 链 接: http://bbs.pediy.com/s ...
- C#大文件读取和查询--内存映射
笔者最近需要快速查询日志文件,文件大小在4G以上. 需求如下: 1.读取4G左右大小的文件中的指定行,程序运行占用内存不超过500M. 2.希望查询1G以内容,能控制在20s左右. 刚开始觉得这个应该 ...
- 用C#实现的内存映射
当文件过大时,无法一次性载入内存时,就需要分次,分段的载入文件 主要是用了以下的WinAPI LPVOID MapViewOfFile(HANDLE hFileMappingObject, DWORD ...
- 【转】C#大文件读取和查询--内存映射
笔者最近需要快速查询日志文件,文件大小在4G以上. 需求如下: 1.读取4G左右大小的文件中的指定行,程序运行占用内存不超过500M. 2.希望查询1G以内容,能控制在20s左右. 刚开始觉得这个应该 ...
- Atitit.病毒木马的快速扩散机制原理nio 内存映射MappedByteBuffer
Atitit.病毒木马的快速扩散机制原理nio 内存映射MappedByteBuffer 1. Java NIO(New Input/Output)1 1.1. 变更通知(因为每个事件都需要一个监听者 ...
- Java中用内存映射处理大文件
在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如 ...
- linux编程之内存映射
一.概述 内存映射是在调用进程的虚拟地址空间创建一个新的内存映射. 内存映射分为2种: 1.文件映射 ...
随机推荐
- 移动端触摸touchstart监听事件
click.mousedown等事件适用于PC端,在移动端会有一定时间的延迟,所以更好的优化移动端体验,要用touch事件, 1.首先要添加一个监听事件,监听移动端行为 element.addEven ...
- SpringCloud学习之Zuul路由转发、拦截和熔断处理(七)
Spring Cloud Zuul 服务网关是微服务架构中一个不可或缺的部分.通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由.均衡负载功能之外,它还具备了权限控制等功能. Sp ...
- GoJS组织结构图2
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Kubernetes 二进制部署(一)单节点部署(Master 与 Node 同一机器)
0. 前言 最近受“新冠肺炎”疫情影响,在家等着,入职暂时延后,在家里办公和学习 尝试通过源码编译二进制的方式在单一节点(Master 与 Node 部署在同一个机器上)上部署一个 k8s 环境,整理 ...
- IDEA 单行注释与代码对齐
效果 修改步骤 Settings -> Editor -> Code Style (1)修改.java文件的注释 comment 评论.注释.意见. (2)修改.html文件的注释 ( ...
- 075、Java面向对象之定义匿名对象
01.代码如下: package TIANPAN; class Book { // 定义一个新的类 private String title; // 书的名字 private double price ...
- 为什么Fun函数能够执行
#include<stdio.h> #include<windows.h> void Fun() { printf("Kali-Team\n"); } in ...
- POJ 2391 Ombrophobic Bovines 网络流 建模
[题目大意]给定一个无向图,点i处有Ai头牛,点i处的牛棚能容纳Bi头牛,求一个最短时间T使得在T时间内所有的牛都能进到某一牛棚里去.(1 <= N <= 200, 1 <= M & ...
- git客户端出现libpng warning: iCCP: known incorrect sRGB profile
在关闭gitk窗口的时候,会出现一系列的 libpng warning: iCCP: known incorrect sRGB profilelibpng warning: iCCP: known ...
- Echarts学习宝典
1,可以使用百度图说中的图表代码复制到option中,还可在百度图说中以可视化的方式编辑数据,调整参数和编辑样式.(也可借助百度图说更改部分样式) 2,借助网站 https://echarts.bai ...