Autor Beitrag
DelphiNoob
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 152

Win 2003 Server
D7 Ent
BeitragVerfasst: Di 10.12.02 11:23 
Hi,

hab schon im Forum gesucht, aber nichts spezifisches gefunden.

Ich möchte gerne 2 Dateien (eine alte und eine neue) binär einlesen. (Sind z.b. *.mul files). Diese Dateien dann vergleichen, und die unterschiede in eine Datei schreiben (Am einfachsten stelle ich mir das so vor: BITNUMMER, BITNUMMER, BITNUMMER = 1; usw usw usw. So soll es quasi in die Datei geschrieben werden. Also das die Bitnummern in 1 gewandelt werden).

Und ein anderes Programm wiederum soll die Änderungsdatei in die alte version quasi Reinpatchen.

Ich weiß das es solche Programme gibt, aber ich schreibe einen Autoupdater, und ich will kein extra Programm mitliefern. Ich hoffe jetzt auf gute Tipps von euch Profis.

Danke!
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 10.12.02 11:56 
Hi!

Ich habe sowas auch mal gemacht, die Performance war aber nicht berauschend.

So einfach, wie du es dir vorstellst, ist es leider nicht. Stelle dir folgende 2 Dateien vor:
123456789
A123456789

Du würdest für jede Byteposition nun unterschiedliche Werte eintragen, obwohl ein großer Teil doch gleich geblieben ist.

Ich habe es so gelöst, daß ich versucht habe, möglichst große gleiche Abschnitte, die sich an beliebigen Positionen befinden, herauszusuchen, und diese zu notieren:
ausblenden Quelltext
1:
2:
3:
BlockOldPos:=0;
BlockNewPos:=1;
BlockLength:=9;

(Nein, natürlich nicht hardcodiert!) :mrgreen:

Cu, :)
Udontknow

PS: Du kannst höchstens auf Byte-Ebene operieren, bitweise geht das Lesen und Schreiben nicht.
DelphiNoob Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 152

Win 2003 Server
D7 Ent
BeitragVerfasst: Di 10.12.02 12:11 
Naja, Byte Ebene reicht ja auch.

Hmm.. blockweise...

Würde Zeilenweise nicht auch gehen? Bzw wäre das dann nicht für die Performance besser? Ich hab dich mal in meinem ICQ geaddet, wenn du on bist schreib ich dich einfach mal an.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 10.12.02 12:53 
Wie liest man eine Binärdatei zeilenweise? :roll:
DelphiNoob Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 152

Win 2003 Server
D7 Ent
BeitragVerfasst: Di 10.12.02 13:31 
Wär sagte das es Binärdateien sind? Niemand!
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 10.12.02 14:00 
Bist du Niemand? Lies mal dein erstes Posting durch! 8)

Zitat:
Ich möchte gerne 2 Dateien (eine alte und eine neue) binär einlesen.


Natürlich kannst du zeilenweise vorgehen. Aber auch dort ergibt sich dieselbe Problematik. Was, wenn eine Zeile eingefügt wird?

Cu,
Udontknow
DelphiNoob Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 152

Win 2003 Server
D7 Ent
BeitragVerfasst: Di 10.12.02 15:01 
Ich glaub wir reden aneinander vorbei was Binär Datein angeht :)

Du sagtest doch, es geht nicht auf BIT bzw Binärbasis. Im folgenden Post schreibe ich dann etwas von Zeilenweise einlesen. Somit hat sich das BITweise einlesen doch eh erledigt.

Wäre dennoch nett wenn man mir mal ein paar anreize bzw informationen geben könnte wie ich das am besten realisiere.

Danke.
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 10.12.02 15:12 
Hi.

Also, wenn man von Binärdateien redet, so meint man meist einfach nur Rohdaten. Du kannst tatsächlich nicht bitweise einlesen, sondern höchstens (wenigstens) 8 Bit, also ein Byte. Das hat aber nix mit dem Unterschied "Binär/Text" zu tun. Beim Text einlesen gehst du auf bestimmte Daten in der Datei ein, z.B. ist das Zeilenende durch ein Carriage-Return gekennzeichnet, während das "binäre Lesen" einfach nur das Einlesen der Daten ohne deren Interpretation ist.

Einen Anreiz habe ich dir ja schon oben gegeben. Diese Aufgabe ist nichts, was man mal eben so zwischendurch macht, da wirst du schon ein wenig Schmalz reinstecken müssen.

Cu,
Udontknow
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 10.12.02 18:37 
Oder man überlegt noch mal, wie man die Suchmaschine richtig füttert.
Was soll der AutoUpdater machen?

Sicher Software updaten, in Form eines Patches.
Diese Worte lässt man mal von der AUQ.de-Suche suchen, und man wird genau einmal fündig -> Software updaten? Welche Möglichkeiten gibt es?