2010-04-13 4 views
6

Ist es möglich, effizient einfügen oder entfernen Bytes aus der Mitte einer großen Datei, und wenn ja wie? Oder bin ich fest, die gesamte Datei nach dem Punkt neu zu schreiben, an dem die Daten eingefügt oder entfernt wurden?Wie kann ich Bytes aus der Mitte einer großen Datei in .NET einfügen oder entfernen.

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

Antwort

4

Am effizientesten wäre es, die Position zu suchen, an der Sie das Element einfügen möchten, alles bis zum Ende zu lesen, das neue Element einzufügen und den Rest zu kopieren.

Das Problem ist nicht eine Sprache, sondern tatsächlich, wie Daten in Medien gespeichert werden, wo alles nur eine lange Sequenz von Bits ist. Sie können es sich als einen einzelnen Streifen Papier mit den Daten vorstellen, die im Stift geschrieben werden. Wenn Sie etwas einfügen möchten, müssen Sie alles zurückschieben, was danach kommt. Natürlich, wenn Sie viel Platz zwischen Datenblöcken haben, können Sie Ihre Sachen dort einfügen (was die Idee hinter Sparse Files ist), aber das ist kaum platzsparend.

1

Wenn es eine flache Datei ist, müssen Sie den Teil nach den Änderungen neu schreiben. Wenn es sich um eine Datei mit einer logischen Struktur handelt (z. B. Zeiger auf andere Teile der Datei), können Aktualisierungen sehr effizient sein.

2

Es gibt keine Möglichkeit, Daten in O (1) in C# oder C++ einzufügen oder Daten zu entfernen, noch eine Sprache mit Standard-APIs oder Klassenbibliotheken.

Das Beste, was Sie tun können, ist ein Dateiformat, das Sie selbst definieren, es könnte O (1) -Einfügungen und -Entfernungen unterstützen. Aber Sie müssten wahrscheinlich mit Fragmentierung umgehen.

Sie könnten vielleicht auch eine SQL-Datenbank wie sqlite betrachten, die sich um die Komplexität kümmern würde.

+0

Nicht POSIX noch Windows, was bedeutet, dass es in keiner Sprache möglich ist. –

0

Sie müssen die Datei kopieren. Im besten Fall können Sie mit Sparse Files davonkommen, aber nur, wenn die 'Viele Bytes' Nullen sind.

Verwandte Themen