首页
社区
课程
招聘
[求助]CreateFileMapping大文件阅读时乱码
发表于: 2018-3-15 21:56 3720

[求助]CreateFileMapping大文件阅读时乱码

2018-3-15 21:56
3720
用内存映射文件的方式写了个大文件阅读器,每次映射最大的虚拟内存的分配粒度,但是我怎么能保证每页的最后一个字是完整的字,而不是乱码呢,有没有方法呢,求指点,谢谢!代码如下:


要解决的问题


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2018-3-15 22:07 被Sanie编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 18
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
每一段的大小是字符所有可能字节数的最小公倍数的倍数应该就可以了
比方某种编码每个字符可能是1/2/3个字节,每段就要是6的倍数
2018-3-15 22:09
0
雪    币: 782
活跃值: (3430)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
3
OxCL 每一段的大小是字符所有可能字节数的最小公倍数的倍数应该就可以了 比方某种编码每个字符可能是1/2/3个字节,每段就要是6的倍数
不行的。比如“啊a啊a啊”,6字节切就坏了
2018-3-16 10:13
0
雪    币: 18
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
yeyeshun 不行的。比如“啊a啊a啊”,6字节切就坏了
什么编码?啊是2字节a是1字节的话  不是切出  "啊a啊a"  吗
2018-3-16 10:58
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
5
头部尾部多映射一个PAGE,自己处理一下跨页问题,使用整个文件内的offset来标记字符开始位置,不要使用页内offset。
最后于 2018-3-16 11:47 被hzqst编辑 ,原因:
2018-3-16 11:46
0
雪    币: 782
活跃值: (3430)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
6
OxCL 什么编码?啊是2字节a是1字节的话 不是切出 "啊a啊a" 吗
非要较劲吗?
如果是1字节,“啊a啊啊”,6字节就坏了
如果2字节,基本没啥问题;
3字节,“啊a啊”不是都切坏了吗
哪有那么理想的字符串刚好“啊a啊a”的给你切
2018-3-16 11:50
0
雪    币: 18
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
yeyeshun 非要较劲吗? 如果是1字节,“啊a啊啊”,6字节就坏了 如果2字节,基本没啥问题; 3字节,“啊a啊”不是都切坏了吗 哪有那么理想的字符串刚好“啊a啊a”的给你切
是我弄错了

用 0, 1, 2 和加法可以得出任何非负整数,所以假设 n 字节切开

总能找到一个被切坏的串:先构造任意长度 n-1 的串再加上一个长度 2 的字符


所以照我之前说的那样 “找一个怎么也切不坏的切开长度” 的思路是不可能成功的。。。


最后于 2018-3-16 13:00 被OxCL编辑 ,原因: 说明为什么是错的
2018-3-16 12:00
0
雪    币: 782
活跃值: (3430)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
8
OxCL yeyeshun 非要较劲吗? 如果是1字节,“啊a啊啊”,6字节就坏了 如果2字节,基本没啥问题; 3字节,“啊a啊”不是都切坏了吗 哪有那么理想的 ...
不好意思,我前面说话有点冲。
现在说正题,这种问题就我的能力来说,只能是具体情况具体分析了,按照楼主的情况,如果是我,我会这么做:
按照固定size载入一部分内容,然后从这部分内容的末尾开始往前找换行,根据找到的最靠近末尾的换行,来调整下次载入的位置。
如果内容中没有换行,可以先储存起来,载入下个内容,拼接起来再做处理。
2018-3-16 13:21
0
雪    币: 988
活跃值: (133)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
yeyeshun 不好意思,我前面说话有点冲。 现在说正题,这种问题就我的能力来说,只能是具体情况具体分析了,按照楼主的情况,如果是我,我会这么做: 按照固定size载入一部分内容,然后从这部分内容的末尾开始往前找 ...
谢谢两位的建议  我再思考尝试一下  我想问一下网上下载的大文件阅读器为什么就不会有这种情况呢
2018-3-17 14:38
0
雪    币: 1787
活跃值: (340)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
Sanie 谢谢两位的建议 我再思考尝试一下 我想问一下网上下载的大文件阅读器为什么就不会有这种情况呢
自己判断末尾是不是半个字符。你去看看vc  printf的源码,他里面有相关的处理办法。
2018-3-17 16:15
0
游客
登录 | 注册 方可回帖
返回
//