Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#13

Re: [Streams]: existierende Daten entfernen / einfügen

  Alt 9. Mär 2005, 17:19
Zitat von mytar:
Ich hab eine Datei, und öffne sie via Stream, nun möchte ich mit Seek() die entsprechende Position suchen, und dann was in den Stream einfügen, oder herauslöschen. Die Datei hab ich zuvor selbst erzeugt, ich kenne also die Dateistruktur.
Zitat von Luckie:
Wenn du mitten reinschreiben willst, dann wird dir nichts anderes übrigbleiben, als ab der Stelle den Rest in einem memoryStream zwischenzuspeichern, deinen Datensatz reinschreiben und dann den gesicherten Rest wieder dranzuhängen.
Was Lucky sagt, ist so korrekt und daran führt kein Weg vorbei.
Theoretisch könnte man alle 8kByte (die Clustergrösse) weitere Cluster einfügen oder löschen.
Praktisch kannst du eine Datei auf Festplattenebene nicht manipulieren ohne sehr viel Aufwand zu betreiben.

Alle Dateiformate für Datenbanken gehen nun so vor, dass ein Block oder Datensatz als gelöscht markiert wird und neue Daten ans Dateiende geschrieben werden.
Nach einige Zeit enthält die Datei Löcher und kann wesentlich mehr Platz auf der Platte brauchen, als Nutzdaten vorhanden sind.
Dann ist eine Komprimierung der Daten fällig. (Nutzdaten werden in neue Datei kopiert, alte Datei geöscht und Neu -> Alt umbenamst)

Also denk dir mal ein schlaues Datenformat aus. Eine Archivdatei könnte z.B. folgenden Aufbau haben:
Code:
Datensatzname: string(32);
Nutzdatensize: integer;
blocksize: integer;     // immer > oder = Nutzdatensize
Flags: Cardinal;       // 1=gelöscht
[nutzdaten.....][evtl. unbenutzte Daten]
Andreas
  Mit Zitat antworten Zitat