//你必须映射一个只包含一小部分文件数据的文件视图。首先映射一//个文件的开头的视图。当完成对文件的第一个视图的访问时,可以取消它的映像,然后映射//一个从文件中的一个更深的位移开始的新视图。必须重复这一操作,直到访问了整个文件。//这使得大型内存映射文件的处理不太方便,但是,幸好大多数文件都比较小,因此不会出现//这个问题#include "stdafx.h"#include #include #include #pragma warning(disable:4996)using namespace std;int main(int argc, char* argv[]){HANDLE hFile = CreateFile(L"E:\\install\\C.iso", GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);HANDLE hFile1 = CreateFile(L"e:\\install\\C1.iso", GENERIC_WRITE | GENERIC_READ, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);//写一个新文件if(hFile != NULL){HANDLE hMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);SYSTEM_INFO si;GetSystemInfo(&si);DWORD dwGranularity = si.dwAllocationGranularity;//分配粒度DWORD dwFileSizeHigh = 0;__int64 qwFileSize = GetFileSize(hFile, &dwFileSizeHigh);qwFileSize += ((__int64)(dwFileSizeHigh) <<32 closehandle="" hfile="" __int64="" qwfileoffset="0;" while="" qwfilesize="">= qwFileOffset){//当qwFileSize的文件大小为4.2G时(测试文件),依然从低位开始以粒度的N倍大小写映射文件cout<<qwFileSize<<" "<<qwFileOffset< 0){char* hView = (char*)MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, qwFileOffset, dwIncreae);DWORD dwWrite = 0;WriteFile(hFile1, hView, dwIncreae, &dwWrite, NULL);UnmapViewOfFile(hView);qwFileOffset += dwIncreae;}else{//当剩余的数据不足为映射大小的倍数时,且不为粒度的倍数时,进行一次性操作DWORD dwRemain = qwFileSize - qwFileOffset;//剩余的文件大小char* hView= (char*)MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, qwFileOffset, dwRemain);DWORD dwWrite = 0;WriteFile(hFile1, hView, dwRemain, &dwWrite, NULL);UnmapViewOfFile(hView);break;//结束映射}}CloseHandle(hMap);}CloseHandle(hFile1);return 0;}//虽然可以成功写数据,不过速度依然较慢

版权声明:本文为博主原创文章,未经博主允许不得转载。

C++ 大文件读写的更多相关文章

  1. 【JavaNIO的深入研究4】内存映射文件I/O,大文件读写操作,Java nio之MappedByteBuffer,高效文件/内存映射

    内存映射文件能让你创建和修改那些因为太大而无法放入内存的文件.有了内存映射文件,你就可以认为文件已经全部读进了内存,然后把它当成一个非常大的数组来访问.这种解决办法能大大简化修改文件的代码.fileC ...

  2. java大文件读写操作,java nio 之MappedByteBuffer,高效文件/内存映射

    java处理大文件,一般用BufferedReader,BufferedInputStream这类带缓冲的Io类,不过如果文件超大的话,更快的方式是采用MappedByteBuffer. Mapped ...

  3. vc关于大文件读写

    http://blog.csdn.net/believefym/article/details/1162461 在做tcp发送大文件的问题时,怎么读取大文件,现在还没有这方面的需求,留作以后处理: 在 ...

  4. Matlab 用fread、fwrite实现大文件读写

    最近在分析一个35G的大数据文件,猛一看,是不是很吓人啊,不过还好,师兄写文件的格式非常规范,读取数据来也就很方便了,主要是使用了读写文件的两个函数fread和fwrite,下面用matlab简单尝试 ...

  5. jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件

    day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一 ...

  6. java filechannel大文件的读写

    java读取大文件 超大文件的几种方法 转自:http://wgslucky.blog.163.com/blog/static/97562532201332324639689/   java 读取一个 ...

  7. Mac技巧之让U盘、移动硬盘在苹果电脑和Windows PC都能识别/读写,且支持4GB大文件:exFAT格式

    如果您的 U 盘.移动硬盘既要用于 PC 又要用于苹果电脑,Mac OS X 系统的 HFS+ 和 Windows 的 NTFS 格式显然都不行……HFS+ 在 Windows 下不识别,NTFS 格 ...

  8. 大数据【二】HDFS部署及文件读写(包含eclipse hadoop配置)

    一 原理阐述 1' DFS 分布式文件系统(即DFS,Distributed File System),指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连.该系统架构 ...

  9. 读写文件:每次读入大文件里的一行、读写.CSV文件

    读文件: 传统的读法.所有读出,按行处理: fp=open("./ps.txt", "r"); alllines=fp.readlines(); fp.clos ...

随机推荐

  1. Redis的两个典型应用场景

    Redis简介 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结构,例如hashes, lists, sets等,同时支持数据持久化.除此之外,Red ...

  2. 树莓派中实现ll命令

    用管了centos的童鞋们,到了一个没有ll命令的环境里,那是多么的痛苦,在baidu后,将实现方法记录如下 方法一: echo "alias ll='ls -l'" >&g ...

  3. 蓝牙 BLE 协议学习: 001-BLE协议栈整体架构

    背景 在深入BLE协议帧之前,我们先看一下BLE协议栈整体架构. 转载自:<深入浅出低功耗蓝牙(BLE)协议栈> 架构 如上图所述,要实现一个BLE应用,首先需要一个支持BLE射频的芯片, ...

  4. endnote的使用

    下载网址: https://support.clarivate.com/Endnote/s/article/EndNote-Installer-download?language=en_US 关联of ...

  5. word2010文档如何隐藏右侧灰色空白不可编辑区域

    word2010文档如何隐藏右侧灰色空白不可编辑区域, (word2007也是差不多的操作) 两种方法: 1.点击图中的“最终状态”按钮: 2.点击图中的”以嵌入方式显示所有修订“的按钮:

  6. input type="submit" 和"button"有什么区别

    HTML中<input type="submit" /> 和 <input type="button" /> 主要从元素定义类型.点击触 ...

  7. 003-explode分割字符串

    <?php $str = "品牌电脑@品牌手机@高档男士衬衫@高档女士挎包"; //定义字符串常量 $str_arr = explode("@", $st ...

  8. Microsoft Windows 实用程序 Sysinternals Utilities Index

    最新页面时间:2017年5月16日 Sysinternals被MS收购--windows internals共近70多个工具集 Sysinternals套件 整套Sysinternals Utilit ...

  9. 获取控件的xy坐标

    procedure TForm1.SpeedButton1Click(Sender: TObject); var   Apoint:TPoint; begin   APoint:=TSpeedButt ...

  10. 09 MySQL字符集

    字符集的选择     1.数据库方面最流行的是UTF-8     2.如果只考虑支持汉字,那么使用GBK,毕竟GBK下,每个汉字只占用2个字节,而UTF-8需要3个字节.     3.如果需要做大量的 ...