C++ 大文件读写
//你必须映射一个只包含一小部分文件数据的文件视图。首先映射一//个文件的开头的视图。当完成对文件的第一个视图的访问时,可以取消它的映像,然后映射//一个从文件中的一个更深的位移开始的新视图。必须重复这一操作,直到访问了整个文件。//这使得大型内存映射文件的处理不太方便,但是,幸好大多数文件都比较小,因此不会出现//这个问题#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++ 大文件读写的更多相关文章
- 【JavaNIO的深入研究4】内存映射文件I/O,大文件读写操作,Java nio之MappedByteBuffer,高效文件/内存映射
内存映射文件能让你创建和修改那些因为太大而无法放入内存的文件.有了内存映射文件,你就可以认为文件已经全部读进了内存,然后把它当成一个非常大的数组来访问.这种解决办法能大大简化修改文件的代码.fileC ...
- java大文件读写操作,java nio 之MappedByteBuffer,高效文件/内存映射
java处理大文件,一般用BufferedReader,BufferedInputStream这类带缓冲的Io类,不过如果文件超大的话,更快的方式是采用MappedByteBuffer. Mapped ...
- vc关于大文件读写
http://blog.csdn.net/believefym/article/details/1162461 在做tcp发送大文件的问题时,怎么读取大文件,现在还没有这方面的需求,留作以后处理: 在 ...
- Matlab 用fread、fwrite实现大文件读写
最近在分析一个35G的大数据文件,猛一看,是不是很吓人啊,不过还好,师兄写文件的格式非常规范,读取数据来也就很方便了,主要是使用了读写文件的两个函数fread和fwrite,下面用matlab简单尝试 ...
- jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件
day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一 ...
- java filechannel大文件的读写
java读取大文件 超大文件的几种方法 转自:http://wgslucky.blog.163.com/blog/static/97562532201332324639689/ java 读取一个 ...
- Mac技巧之让U盘、移动硬盘在苹果电脑和Windows PC都能识别/读写,且支持4GB大文件:exFAT格式
如果您的 U 盘.移动硬盘既要用于 PC 又要用于苹果电脑,Mac OS X 系统的 HFS+ 和 Windows 的 NTFS 格式显然都不行……HFS+ 在 Windows 下不识别,NTFS 格 ...
- 大数据【二】HDFS部署及文件读写(包含eclipse hadoop配置)
一 原理阐述 1' DFS 分布式文件系统(即DFS,Distributed File System),指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连.该系统架构 ...
- 读写文件:每次读入大文件里的一行、读写.CSV文件
读文件: 传统的读法.所有读出,按行处理: fp=open("./ps.txt", "r"); alllines=fp.readlines(); fp.clos ...
随机推荐
- MySQL更新时间
Mysql时间加减函数为date_add().date_sub()定义和用法DATE_ADD() 函数向日期添加指定的时间间隔.DATE_SUB() 函数向日期减少指定的时间间隔.语法DATE_ADD ...
- Day9 - I - 不要62 HDU - 2089
杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer).杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍, ...
- 091、Java中String类之使用“==”比较
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- javac导出参考文档报错 错误: 编码GBK的不可映射字符”
- 201706 gem 'rails-erd'生成Model关系图
[工具]一张图理清各个model之间关系 安装 Graphviz 2.22+: 终端机中执行 brew install graphviz Gemfile中添加 gem 'rails-erd' 终端机中 ...
- web页面性能优化
web前端页面性能优化 网站的划分一般为二:前端和后台.我们可以理解成后台是用来实现网站的功能的,比如:实现用户注册,用户能够为文章发表评论等等.而前端呢? 其实应该是属于功能的表现.并且影响用户访问 ...
- 在 Delphi 中使用微软全文翻译的小例子
使用帮助 需要先去申请一个 AppID: http://www.bing.com/toolbox/bingdeveloper/使用帮助在: http://msdn.microsoft.com/en-u ...
- Spark 下操作 HBase(1.0.0 新 API)
hbase1.0.0版本提供了一些让人激动的功能,并且,在不牺牲稳定性的前提下,引入了新的API.虽然 1.0.0 兼容旧版本的 API,不过还是应该尽早地来熟悉下新版API.并且了解下如何与当下正红 ...
- POJ 3468 区间更新(求任意区间和)A Simple Problem with Integers
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 163977 ...
- LeetCode实战练习题目 - Array
实战练习题目 - Array 盛最多水的容器 class Solution { public: int maxArea(vector<int>& height) { int res ...