急需解决的一个映射文件问题,请大家帮忙

copygirl 2006-01-19 06:12:09
我现在用CreateFileMapping做文件映射,有个问题无法解决:

在映射文件的时候,是要在CreateFileMapping里设定需要使用的映射内存的大小的;
我现在需要删除一行文件内容,这样的话,映射内存的大小就要减少。但是我在实际操作中发现,映射内存最小为该文件的大小,最大值可以设成64bit的一个整数。

我的问题是:如果我要删除一行文件内容,而映射内存大小是不变的,那么在关闭这个文件之后,假设被删除了N个字符,在文件尾部就会有N个空格;这样的话,如果进行若干次增、删操作,文件就会变得很乱--请问这个问题该怎么解决呢?有人碰到过吗?

请大家帮忙,非常感谢!
...全文
90 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
healer_kx 2006-01-20
  • 打赏
  • 举报
回复
。。。 我来接分的。表打我。
copygirl 2006-01-20
  • 打赏
  • 举报
回复
内存映射文件本身还是有一些局限性的,譬如一旦您生成了一个内存映射文件,那么您在那个会话期间是不能够改变它的大小的。所以内存映射文件对于只读文件和不会影响其大小的文件操作是非常有用的。当然这并不意味着对于会引起改变其大小的文件操作就一定不能用内存影射文件的方法,您可以事先估计操作后的文件的可能大小,然后生成这么大小一块的内存映射文件,然后文件的长度就可以增长到这么一个大小。

所以,不能正确地删除一行数据:(
doway 2006-01-19
  • 打赏
  • 举报
回复
如果是处理文本文件,不应该使用内存映射文件的方式处理。

内存映射文件应该做为一种低层的技术来使用。
copygirl 2006-01-19
  • 打赏
  • 举报
回复
嗯,感觉普通的API函数操作与映射文件操作不一样的
另外,请问我怎样在文件开头设置文件大小呢?谢谢
junguo 2006-01-19
  • 打赏
  • 举报
回复
文件使用中有块的概念.文件的最小大小为4k或者8k(依据操作系统及cpu来定).你的文件在硬盘上事实上不可能是小于4k的.判断文件是否结束就是按造是否为\n来判断的.后面的字符就不在有意义.还有些文件,在开头就有标志大小的量.你保存文件的时候应该会有一个设定文件大小的量.不会出现你所说的结尾有空格的情况.

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧