windows下怎么快速修改大文件?

Athrob 2011-03-26 10:47:16
怎么能快速在一个超大文件前面插入一小段数据
比如在一个1G的文件前面插入2M数据,时间不超过10秒
如果read然后 write到新文件也太慢了
用内存映射好像没办法改变大小?
有没有比较快速的办法?
...全文
231 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Athrob 2011-03-27
  • 打赏
  • 举报
回复
看来直接操作大文件快速添加删除数据是行不通了.只有自己定义个索引表然后处理了.
结贴了.
Athrob 2011-03-26
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lactoferrin 的回复:]
它是内存映射复制文件,并在新文件添加内容,一个快字也没有
[/Quote]
晓得了,那看来修改大文件要么就用read+write重新写出一份
要么就直接在原文件尾部添加了.
Lactoferrin 2011-03-26
  • 打赏
  • 举报
回复
它是内存映射复制文件,并在新文件添加内容,一个快字也没有
Athrob 2011-03-26
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lactoferrin 的回复:]
引用 7 楼 plwxbm 的回复:
引用 6 楼 lactoferrin 的回复:
内存映射并不能增加存取硬盘的速度,只是某些情况下能更好的管理文件缓冲区,有很多人说内存映射是操作内存,绕过了硬盘io,这是完全错误的

所以那个1G的映射直接转到新文件去也不会有什么好处,且内存映射不是针对把大文件扫描一遍的操作

那到底有什么办法可以快速修改一个大文件在其前面插入部分数据?

没……
[/Quote]
那看来是没办法了.那网上写的利用内存映射快速修改大文件,在前面插入1段数据有啥用.
链接:http://www.vckbase.com/document/viewdoc/?id=1831
Lactoferrin 2011-03-26
  • 打赏
  • 举报
回复
创建文件和删除文件是快的,因为只需操作较少的数据,无需处理文件的数据部分
Athrob 2011-03-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lthyxy 的回复:]
1G,10秒.
[/Quote]
我记得有次我用文件映射瞬间创建了一个1G大小的文件,当然内容是随机的.
pps的临时文件应该也是这个原理吧.
只不过我忘了当时具体怎么弄的了.
Lactoferrin 2011-03-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 plwxbm 的回复:]
引用 6 楼 lactoferrin 的回复:
内存映射并不能增加存取硬盘的速度,只是某些情况下能更好的管理文件缓冲区,有很多人说内存映射是操作内存,绕过了硬盘io,这是完全错误的

所以那个1G的映射直接转到新文件去也不会有什么好处,且内存映射不是针对把大文件扫描一遍的操作

那到底有什么办法可以快速修改一个大文件在其前面插入部分数据?
[/Quote]
没有,文件的存储结构决定这样做是一般不可行的,必须把后面的数据整体移位
对于数据大小是簇大小的整数倍的可以,但是这是特殊情形,操作系统也就没有支持
liutengfeigo 2011-03-26
  • 打赏
  • 举报
回复
1G,10秒.
Athrob 2011-03-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lactoferrin 的回复:]
内存映射并不能增加存取硬盘的速度,只是某些情况下能更好的管理文件缓冲区,有很多人说内存映射是操作内存,绕过了硬盘io,这是完全错误的

所以那个1G的映射直接转到新文件去也不会有什么好处,且内存映射不是针对把大文件扫描一遍的操作
[/Quote]
那到底有什么办法可以快速修改一个大文件在其前面插入部分数据?
Lactoferrin 2011-03-26
  • 打赏
  • 举报
回复
内存映射并不能增加存取硬盘的速度,只是某些情况下能更好的管理文件缓冲区,有很多人说内存映射是操作内存,绕过了硬盘io,这是完全错误的

所以那个1G的映射直接转到新文件去也不会有什么好处,且内存映射不是针对把大文件扫描一遍的操作
Athrob 2011-03-26
  • 打赏
  • 举报
回复
我在想是不是可以创建一个空白文件的内存映射,这个空白文件初始化为新的大小(可以预算)
然后那个1G的映射直接转到新文件去?与1M的合并?
还是没思路 脑袋乱乱的
Athrob 2011-03-26
  • 打赏
  • 举报
回复
比如原文件1G 要在任意地方(不是末尾)插入1M的数据.
用内存映射好像只能映射原文件大小吧.不能增加长度.
插入后原文件就变为1.01G了.或者将两个文件合并为新文件也可以,但是速度要快.
Lactoferrin 2011-03-26
  • 打赏
  • 举报
回复
往后添加数据方便,但是往前添加数据就麻烦
我现在只想到直接操作文件系统底层结构的方法
c_losed 2011-03-26
  • 打赏
  • 举报
回复
只想到内存映射
分段读取也可以考虑
c_losed 2011-03-26
  • 打赏
  • 举报
回复
用内存映射好像没办法改变大小?
可以的

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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