是否可以有效从大文件的中间插入或删除字节,如果是,如何?或者我在插入或删除数据之后重写整个文件?
[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]
答案 0 :(得分:4)
最有效的方法是寻找你想要插入元素的位置,读取所有内容直到最后,插入新元素并复制其余元素。
问题不是语言问题,而是实际上数据如何存储在媒体中,其中一切都只是一长串的比特。你可以把它想象成一张纸条,用笔写出数据。如果你想插入一些东西,你将不得不推翻之后发生的一切。 当然,如果你在数据块之间有很多空白空间,你可以在那里插入你的东西(这是稀疏文件背后的想法),但这几乎没有空间效率。
答案 1 :(得分:2)
无法在C#和C ++中的O(1)中插入数据或删除数据,也无法使用标准API或类库来插入任何语言。
您可以做的最好的事情是您自己定义的某种文件格式,它可以支持O(1)插入和删除。但你可能不得不处理碎片问题。
你或许也可以看一下像sqlite这样的SQL数据库,它可以解决你的复杂问题。
答案 2 :(得分:1)
如果是平面文件,则必须在编辑后重写该部分。如果它是具有逻辑结构的文件(例如,指向文件其他部分的指针),则更新可以非常有效。
答案 3 :(得分:0)
您必须复制该文件。充其量,您可以使用Sparse Files离开,但前提是“大量字节”为零。