NodeJS:如何将数据按位置插入(不覆盖)到文件中?

NodeJS: How to do positional insert (without overwriting) data into a file?

我想在没有overlapping/overwriting现有数据的任何位置(开始、结束、中间)插入一个字符串。

我试过使用

fs.createWriteStream(file, {start: 0, flags: 'r+'}) 但这会覆盖现有数据并且不会按字面意思插入。

我见过将数据读入缓冲区然后将其重新写入文件的解决方案,这对我来说行不通,因为我需要处理更大的数据,而缓冲区有其局限性。

对此有什么想法吗?

通常的操作系统(Windows、Unix、Mac)没有支持将数据插入文件而不重写后面所有内容的文件系统。因此,您不能直接在常规文件中执行您要求的操作。

您的一些技术选择是:

  1. 您将之后的所有数据重写到文件中的新位置,实际上是将其在文件中向上移动,然后您可以在所需位置写入新内容。请注意,在不覆盖您需要保留的数据的情况下执行此操作有点棘手。您基本上必须从文件末尾开始,读取一个块,将其写入一个新的更高位置,返回一个块,重复,直到到达您的插入位置。

  2. 您创建自己的小文件系统,其中逻辑文件由通过某种索引链接在一起的多个文件组成。然后,为了插入一些数据,您将一个文件分成两个(这涉及重写一些数据),然后您可以在其中一个拆分文件的末尾插入。这会很快变得非常复杂。

  3. 您将数据保存在数据库中,这样可以更轻松地插入新数据元素并保留某种索引来确定您可以查询的顺序。数据库负责管理如何在磁盘上存储数据,同时为您提供与数据在磁盘上的存储方式没有直接关联的数据视图。

相关回答: