首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编辑大文件

如何编辑大文件
EN

Stack Overflow用户
提问于 2016-12-20 08:18:08
回答 1查看 561关注 0票数 0

想象一下,我的程序应该编辑一个巨大的文件。为了增加读取时间,我使用mmap(),然后只读取正在查看的部分。但是,如果我想在文件的中间添加一行,那么最好的方法是什么?

是添加一行然后移动文件其余部分的唯一方法吗?听起来很贵。

所以我的问题基本上是:在一个巨大的文件中添加数据的最有效的方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-20 08:21:15

在任何(大型或小型)文件(在Linux或POSIX上)中间插入数据的唯一方法是将该文件复制(到一个新的文件中,然后将副本作为原始的重命名(2) )。因此,您将复制它的头(直到插入点),将数据附加到该副本,然后复制尾(在插入点之后)。您也可以考虑调用财务咨询(2) (甚至是特定于Linux的readahead(2).)但这并不说明有必要复制所有数据。可以使用mmap(2)来替换读(2),但是无论您做什么,都需要复制所有的数据。

当然,如果您正在将文件中间的数据块替换为另一个大小相同的块(因此没有真正的插入),则可以使用普通的伊莉斯(2) + 写(2)

是添加一行然后移动文件其余部分的唯一方法吗?听起来很贵。

是的,这在概念上是唯一的办法。

您应该考虑使用其他简单的文本文件:查看SQLiteGDBM (它们在您的用例中可能非常有效)。另见这个答案。这两种方法都为您提供了比POSIX文件更高的抽象,因此您可以“插入”数据(当然,它们在内部仍然是基于和使用POSIX文件的)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41237649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档