//你必须映射一个只包含一小部分文件数据的文件视图。首先映射一//个文件的开头的视图。当完成对文件的第一个视图的访问时,可以取消它的映像,然后映射//一个从文件中的一个更深的位移开始的新视图。必须重复这一操作,直到访问了整个文件。//这使得大型内存映射文件的处理不太方便,但是,幸好大多数文件都比较小,因此不会出现//这个问题#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. Linux系统使用ss命令查看端口状态

    Linux系统使用ss命令查看端口状态 目录 1.可用工具 2.ss帮助 2.1 选项分类说明 2.2 过滤选项family 2.3 过滤选项state 2.4 状态之间的关系 3.ss的使用 3.1 ...

  2. 《Redis深度历险:核心原理和应用实践》千帆竞发——分布式锁

  3. redis-Hash(哈希表)

    Redis hash 是一个string类型的field和value的映射表,它的添加.删除操作都是O(1)(平均).hash特别适用于存储对象,将一个对象存储在hash类型中会占用更少的内存,并且可 ...

  4. 【Android】在程序中使用触力反馈

    触力反馈又名:hapticFeedbackEnabled 一般有两种实现方式 第一种是在XML布局文件里面设置 android:hapticFeedbackEnabled="true&quo ...

  5. BOM--location对象、history对象

    location对象 location 是最有用的BOM 对象之一,它提供了与当前窗口中加载的文档有关的信息,还提供了一些导航功能. 事实上,location 对象是很特别的一个对象,因为它既是win ...

  6. Java中Compareable和Comparator两种比较器的区别

    Java中Compareable和Comparator两种比较器的区别 参考原文链接:https://www.cnblogs.com/ldy-blogs/p/8488138.html 1.引言 在ja ...

  7. C语言学习从入门到精通书籍,10万读者都认可

    C语言程序设计从入门到精通 10万读者认可的编程图书精粹 零基础自学编程的入门图书 详解C语言编程思想和核心技术 很多初学者,对C语言.c++的概念都是模糊不清的,C语言.c++是什么,能做什么,学的 ...

  8. Python 100 Days

    Day 1 python的缺点 执行效率稍低,因此计算密集型任务可以由C/C++编写. 在开发时可以选择的框架太多(如Web框架就有100多个),有选择的地方就有错误. python解释器 官方的Py ...

  9. 题解 P5122 【[USACO18DEC]Fine Dining】

    思路:最短路+dp 1.先跑一遍最短路,计算出没有干草垛最少要多少时间 2.dp求出有干草垛至少需要多少时间,由于dp有后效性,所以用SPFA辅助转移,dp方程和求最短路一模一样,只是先将有干草垛的拉 ...

  10. P1078 字符串压缩与解压

    P1078 字符串压缩与解压 转跳点: