社区
其它技术问题
帖子详情
windows下怎么快速修改大文件?
Athrob
2011-03-26 10:47:16
怎么能快速在一个超大文件前面插入一小段数据
比如在一个1G的文件前面插入2M数据,时间不超过10秒
如果read然后 write到新文件也太慢了
用内存映射好像没办法改变大小?
有没有比较快速的办法?
...全文
233
15
打赏
收藏
windows下怎么快速修改大文件?
怎么能快速在一个超大文件前面插入一小段数据 比如在一个1G的文件前面插入2M数据,时间不超过10秒 如果read然后 write到新文件也太慢了 用内存映射好像没办法改变大小? 有没有比较快速的办法?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
用内存映射好像没办法改变大小?
可以的
DirectX修复工具 V3.3增强 绿色版
本程序适用于多个操作系统,如
Windows
XP(需先安装.NET 2.0,详情请参阅“致
Windows
XP用户.txt”
文件
)、
Windows
Vista、
Windows
7、
Windows
8、
Windows
8.1、
Windows
8.1 Update、
Windows
10,同时兼容32位操作...
DirectX修复工具 V3.3标准 绿色版
本程序适用于多个操作系统,如
Windows
XP(需先安装.NET 2.0,详情请参阅“致
Windows
XP用户.txt”
文件
)、
Windows
Vista、
Windows
7、
Windows
8、
Windows
8.1、
Windows
8.1 Update、
Windows
10,同时兼容32位操作...
DirectX修复工具 V3.0标准版
本程序适用于多个操作系统,如
Windows
XP(需先安装.NET 2.0,详情请参阅“致
Windows
XP用户.txt”
文件
)、
Windows
Vista、
Windows
7、
Windows
8、
Windows
Blue(
Windows
8.1),同时兼容32位操作系统和64位操作系统...
DirectX修复工具 V3.5在线修复 绿色版 免安装版
本程序适用于多个操作系统,如
Windows
XP(需先安装.NET 2.0,详情请参阅“致
Windows
XP用户.txt”
文件
)、
Windows
Vista、
Windows
7、
Windows
8、
Windows
8.1、
Windows
8.1 Update、
Windows
10,同时兼容32位操作...
DirectX修复工具 V3.2在线修复版
本程序适用于多个操作系统,如
Windows
XP(需先安装.NET 2.0,详情请参阅“致
Windows
XP用户.txt”
文件
)、
Windows
Vista、
Windows
7、
Windows
8、
Windows
Blue(
Windows
8.1),同时兼容32位操作系统和64位操作系统...
其它技术问题
3,881
社区成员
9,053
社区内容
发帖
与我相关
我的任务
其它技术问题
C/C++ 其它技术问题
复制链接
扫一扫
分享
社区描述
C/C++ 其它技术问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章