Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Unterschiede in Binärdatei(en) separat speichern (https://www.delphipraxis.net/117339-unterschiede-binaerdatei-en-separat-speichern.html)

Stefanie 16. Jul 2008 09:42


Unterschiede in Binärdatei(en) separat speichern
 
Hallo,
ich tausche mir mit einem Bekannten regelmäßig Daten über's Internet(FTP-Server) aus. Dabei handelt es sich immer wieder um die gleichen Dateien( z.T. um Datenbanken, gezippte Archive & Binär-Dateien), die nur jeden Tag ein wenig erweitert werden. Num sollte die Sache übers Internet so effizient wie möglich gehn, deshalb war meine Überlegung, nur die binären Veränderungen der Dateien auszulesen, ein sehr viel kleineres Image zu erstellen & nur noch dieses dann meinem Bekannten zu senden. Der hat ja die Daten vom Vortag und braucht nur noch das Image drüberspielen und ist updated. Im Forum hab ich so was ähnliches mit Bilder vergleichen gefundenLink.

Zitat:


1. Bilde die Differenz zwischen dem alten und dem neuen Bild (z.B. einfach die RGB-Werte voneinander abziehen) und speichere das Ergebnis in einem 24-Bit-Stream.
2. Wende auf diesen Stream ein verlustfreies Komprimierungsverfahren an.

Das andere Programm kann dann aus dem alten Bild und den Differenzdaten das neue Bild erstellen. Dort wo die Bilder gleich sind, erhälst du eine lange Kette mit Nullen, die von einer Komprimierung normalerweise fast auf die Länge 0 reduziert werden.
Nun hab ich mich mit so einer Sache überhaupt noch nicht beschäftigt, vielleicht gibt's ja sowas schon bzw. wie wäre es am sinnvollsten so etwas umzusetzen.

stahli 16. Jul 2008 10:28

Re: Unterschiede in Binärdatei(en) separat speichern
 
Hi,

das von Dir zitierte Verfahren setzt (würde ich mal vermuten) gleich große (Bild-Dateien) voraus.
Die Pixel-Differenzen = 0 (also viele gleiche Bildinhalte) lassen sich dann platzsparend komprimieren.

Dein Problem würde ich so angehen:

1) Checkdaten für alte Zip ermitteln (damit beim Einlesen von gleichen Dateien ausgegangen wird)
- Dateiname
- Speicherdatum
- Dateigröße
- EinePrüfsumme
2) das gleiche für die neue Zip
3) beides in einen Stream speichern
4) die Bytes der neuen Zip in den Stream schreiben
4a) ggf. Kennzeichen für gleichen Block und die Anzahl der Bytes ("=10000")
und die Daten weglassen
4b) ggf. Kennzeichen für neue Daten und die Anzahl der Bytes ("!500")
und die neuen Bytes anfügen

Beim Wiederherstellen können dann 10000 Bytes aus der alten Zip gelesen werden und die neuen 500 aus dem neue übertragenen Stream.
Ich weiß aber nicht, inwieweit Zips evtl. ihre gesamte Struktur verändern, wenn neue Daten angefügt werden.
Wenn es abwechselnd viele gleiche und auch unterschiedliche Abschnitte gibt wird das Gasnze sicher rsehr aufwändig.

stahli

generic 16. Jul 2008 10:37

Re: Unterschiede in Binärdatei(en) separat speichern
 
Wenn es euch nur drum geht, die Dateien schneller zu kopieren/abzugleichen, dann nutzt doch dementsprechende Tools.

Windows:
SyncToc
WinMerge
WinSCP

Linux:
RSync

Tools abhängig von eurer Umgebung.
Ich nutze meistens WinSCP mit SSH/SFTP, da ich FTP als Protokoll nicht mag.
WinMerge und SyncToc ist eher für NetBios Freigaben geeignet.

In der Linuxwelt nutze ich sonst nur RSync.

Ihr könntet auch eine Sourcecodeverwaltung nutzen.
Subversion z.b. ist sehr praktisch für sowas.
Vor allem habt immer immer alle Stände und alte Versionen von etwas.

Bei den o.g. Lösungen solltest du nicht ZIPen, da du sonst keinen Erfolg hast.

Stefanie 16. Jul 2008 10:57

Re: Unterschiede in Binärdatei(en) separat speichern
 
Danke für die Antworten.
Uns geht es ausschließlich um die Menge der zu übertragenden Daten, denn bei DSL-Light mit einem Upload das der ISDN-Geschwindigkeit entspricht, ziehen sich z.B. 100MB gleich mal über ~3h. Deshalb der Ansatz nur die Änderungen zu übertragen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz