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 ...
随机推荐
- redis api-String
- [经验] 项目中 session 过期后弹出的登录窗口无法登录怎么办
背景: 当session过期后, 按照 系统的设计, 会自动跳转到登录页面, 重新进行登录操作 问题: 由于进入主页后, 其他页面都是嵌入式的模板页, 所以这时的登录页面也是内嵌在index模板下的 ...
- PHP 符号大全
注解符号: // 单行注解 /* */ 多行注解 引号的使用 ’ ’ 单引号,没有任何意义,不经任何处理直接拿过来; " "双引号,PHP动态处理然后输出,一般 ...
- 简单看看ReentrantLock
前面我们分析了AQS的基本原理,然后也试着基于AQS实现了一个可重入的锁了,现在我们再来看看官方的ReentrantLock锁,这个锁是可重入的独占锁,也就是说同时只有一个线程可以获取该锁,而且这个线 ...
- 吴裕雄--天生自然JAVAIO操作学习笔记:RandomAccessFile
import java.io.File ; import java.io.RandomAccessFile ; public class RandomAccessFileDemo01{ // 所有的异 ...
- springboot内嵌定时任务使用及cron表达式讲解
第一步:pom引入依赖 <dependencies> <dependency> <groupId>org.springframework.boot</grou ...
- P1079 延迟的回文数
P1079 延迟的回文数 转跳点:
- k8s node断电重启
kubernetes断电重启 导致部分pod无法删除 dashboard上处于黄色 kubectl get处于terminate 状态 kubectl delete报错: An error occur ...
- WEB-INF
WEB-INF下的内容是没有办法通过浏览器去请求的.可以把东西放在WEB-INF下面,避免用户直接通过浏览器请求.那些资源只允许通过url请求过来通过其他途径转发给用户. 比如WEB-INF/jsp/ ...
- Install and Configure NFS Server on RHEL 8 / CentOS 8
https://computingforgeeks.com/install-and-configure-nfs-server-on-centos-rhel/