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 ... 
随机推荐
- 仿有道词典App开发
			最近在学习HCoder提供的仿有道词典App项目,该项目采用MUI为前端框架,服务端采用PHP,底层采用了H5+. 
- 「SP1716」GSS3 - Can you answer these queries III
			传送门 Luogu 解题思路 区间最大子段和板子题. 考虑用线段树来做. 对于一个线段树节点所包含区间,它的最大子段和有两种情况,包含中点与不包含. 不包含的情况直接从左右子树转移. 对于包含的情况: ... 
- GSON使用笔记(3) -- 如何反序列化出List
			GSON使用笔记(3) -- 如何反序列化出List 时间 2014-06-26 17:57:06 CSDN博客原文 http://blog.csdn.net/zxhoo/article/deta ... 
- 必应壁纸php获取接口
			<?php if($_GET['idx']==null){ $str=file_get_contents('http://cn.bing.com/HPImageArchive.aspx?idx= ... 
- 非阻塞多路IO
			socket.listen() rfds=[] wfds=[] while(select(rfds,wfds,timeout)){//事件循环 client=socket.accept(timeout ... 
- MQTT v5 (MQTT 5.0) 新特性介绍
			https://blog.csdn.net/mrpre/article/details/87267400 背景 MQTT v3.1.1 作为一个经典的版本,一般能够满足大部分需求:为了避免落后,我们也 ... 
- ffmpeg 学习: 003-关键函数介绍
			背景 了解一些关键函数对于开发的帮助比较大. avformat_open_input FFMPEG 打开媒体的过程开始于 avformat_open_input,因此该函数的重要性不可忽视. 在该函数 ... 
- ffmpeg 学习:000-概述和库的组成
			背景 ffmpeg bin工具 可能无法满足产品的使用,于是需要通过传参调用ffmpeg库,即在通过更底层的方式使用它. FFmpeg 介绍 FFmpeg是领先的多媒体框架,能够解码,编码,转码,复用 ... 
- P1062 最简分数
			P1062 最简分数 转跳点: 
- GNS3 模拟icmp路由跟踪
			R1 : conf t int f0/0 no shutdown ip add 192.168.1.1 255.255.255.0 no ip routing end R2 f0/0: conf t ... 
