如何在.NET中从大文件的中间插入或删除字节

是否有可能从大文件的中间有效插入或删除字节,如果是这样的话? 或者我在插入或删除数据之后是否重写了整个文件?

[A lot of Bytes][Unwanted Bytes][A lot of Bytes] - > [A lot of Bytes][A lot of Bytes] or [A lot of Bytes][A lot of Bytes] - > [A lot of Bytes][New Inserted Bytes][A lot of Bytes] 

最有效的方法是寻找你想要插入元素的位置,读取所有内容直到最后,插入新元素并复制其余元素。

问题不是语言问题,而是实际上数据如何存储在媒体中,其中一切都只是一长串的比特。 你可以将它想象成一张纸条,用笔写出数据。 如果你想插入一些东西,你将不得不推翻之后发生的一切。 当然,如果你在数据块之间有很多空的空间,你可以在那里插入你的东西(这是稀疏文件背后的想法),但这几乎不节省空间。

无法在C#和C ++中的O(1)中插入数据或删除数据,也无法使用标准API或类库来插入任何语言。

您可以做的最好的事情是您自己定义的某种文件格式,它可以支持O(1)插入和删除。 但你可能不得不处理碎片问题。

你也许也可以看一下像sqlite这样的SQL数据库,它可以解决你的复杂问题。

如果是平面文件,则必须在编辑后重写该部分。 如果它是具有逻辑结构的文件(例如,指向文件其他部分的指针),则更新可以非常有效。

你必须复制该文件。 充其量,您可以使用稀疏文件逃脱,但前提是“大量字节”为零。