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

时间:2010-04-13 03:11:38

标签: c# .net file-io

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

[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]

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

您必须复制该文件。充其量,您可以使用Sparse Files离开,但前提是“大量字节”为零。