![]() |
Re: [Streams]: existierende Daten entfernen / einfügen
Zitat:
|
Re: [Streams]: existierende Daten entfernen / einfügen
Hallo,
Zitat:
Das IStorage Interface gibt es schon so lange, dass es sogar in der Win32 Referenz, die mit Delphi geliefert wird beschrieben wird. Mit ein bißchen COM Kenntnissen und googeln sollte es nicht all zu schwierig werden. Eine Datei mit Header mit Datenteil würde dann intern so aussehen
Code:
Man kann dann nur in den Header schreiben (so viel man möchte). Der Datenteil bleibt davon unberührt.
Root
|----Header |----Daten |
Re: [Streams]: existierende Daten entfernen / einfügen
Zitat:
Zitat:
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] |
Re: [Streams]: existierende Daten entfernen / einfügen
Dann werde ich mich mal in den Umgang mit dem IStorage Interface einarbeiten. Danke für den Tipp =)
|
Re: [Streams]: existierende Daten entfernen / einfügen
Moin!
Naja, ich würde trotzdem Luckies Aussage abwandeln und sagen, das man sich ein temporäres Stream Objekt anlegt. Dabei ist der Typ dann die Sache des Programmierers. Wenn ich weiss, das es ein 100 MB Archiv ist, dann würde ich in einem TFileStream das ganze zwischenspeichern bzw. darin neu zusammenbauen. Bei deutlich kleineren Datenmengen wäre ein TMemoryStream angebracht. Es ist wirklich nicht ein Glanzstück mal schnell den Speicher mit 100 MB voll zu stopfen, so dass Windows vielleicht noch anfängt auf kleineren Rechnern erstmal stundenlang auszulagern. Da wäre dann der direkte Weg auf die Festplatte effizienter. MfG Muetze1 |
Re: Streams: existierende Daten entfernen / einfügen
Ich denke diese IStorage-Interface ist eine gute Möglichkeit!
Wenns aber schnell umgeschrieben werden muss, ist eine temporäre Datei auch sinnvoll. Viele Compression-Tools machen es glaub ich auch auf diesem Weg! |
Re: [Streams]: existierende Daten entfernen / einfügen
Zitat:
Nur interesse halber? |
Re: Streams: existierende Daten entfernen / einfügen
*push* :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz