使用MapView分块读写大文件,需要注意的地方

使用MapView分块读写大文件,需要注意的地方:

必备知识:
1.映射偏移必须按照系统内存分配粒度对齐,默认是64KB,可以用过GetSystemInfo函数获取,否则会映射失败;

整体过程:
1.打开要映射的文件句柄:HANDLE hFile = CreateFileA(args…);
2.获取文件大小:GetFileSizeEx(args…);
3.创建文件映射句柄:HANDLE hMap = CreateFileMappting(args…);
4.映射文件内容到内存:MapViewOfFile(args…);
5.对映射的内存进行操作:读、写
6.立即刷新视图到文件:FlushViewOfFile(args…);
7.释放当前视图:UnMapViewOfFile(args…);
8.释放句柄:CloseHandle(args…)

需求:
需要在文件末尾追加一段数据,比如256字节,用来标记已经写过的文件,以及原始文件大小等信息;

遇到的问题:
1.需要修改原始文件大小,扩充256字节,用于保存额外信息,但修改文件大小的时机有很大影响;
2.创建Map句柄前,扩充了文件大小,那没影响,因为CreateFileMappting函数中需要指定文件映射范围,如果默认填写NULL,该函数内部会自动获取当前文件大小;
3.创建Map句柄后,扩充了文件大小,无法映射到扩充部分内容,会映射失败,返回拒绝访问;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值