Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I insert or remove bytes from the middle of a large file in .NET

Tags:

c#

.net

file-io

Is it possible to efficiently insert or remove bytes from the middle of a large file, and if so how? Or am I stuck rewriting the entire file after the point where the data was inserted or removed?

[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]
like image 762
Eric Anastas Avatar asked Apr 13 '10 03:04

Eric Anastas


1 Answers

The most efficient way would be to seek to the position where you want to insert the element, read everything up to the end, insert the new element and copy back the rest.

The problem's not a language one, but actually how data is stored in media, where everything's just a long sequence of bits. You can imagine it as a single strip of paper with the data written out in pen. If you want to insert something, you'll have to push back everything that comes afterwards. Of course, if you've got a lots of empty space between blocks of data, you can insert your stuff in there (which is the idea behind Sparse Files), but that's hardly space-efficient.

like image 183
Kyte Avatar answered Dec 11 '22 04:12

Kyte