2010-04-13 31 views
6

是否可以有效地插入或從大文件中間刪除字節,如果是這樣?或者我堅持在插入或刪除數據之後重寫整個文件?如何從.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] 

回答

4

最有效的方法是尋找想要插入元素的位置,直到最後讀取所有內容,插入新元素並複製其餘元素。

這個問題不是一種語言,而是實際上數據如何存儲在媒體中,其中一切都只是一長串比特。您可以將它想象成一個紙條,並用筆寫出數據。如果你想插入一些東西,你必須推回之後的所有東西。 當然,如果你在數據塊之間有很多空的空間,你可以在那裏插入你的東西(這是Sparse Files背後的想法),但這不太節省空間。

1

如果是平面文件,則必須在編輯後重寫該部分。如果它是一個具有邏輯結構的文件(例如指向文件其他部分的指針),那麼更新可能非常有效。

2

無法在C#和C++中的O(1)中插入數據或刪除數據,也無法使用標準API或類庫實現任何語言。

你可以做的最好的是你自己定義的某種文件格式,它可以支持O(1)的插入和刪除。但是你必須要處理碎片。

你也許也可以看看像SQLite這樣的SQL數據庫,它會照顧到你的複雜性。

+0

既不POSIX也不Windows意味着它不可能在任何語言。 – 2010-04-13 03:14:22

0

您必須複製該文件。充其量,你也許能夠脫身使用Sparse Files,但只有當'很多字節'是零時。

相關問題