Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Binäre Datei lesen und validieren (https://www.delphipraxis.net/185899-binaere-datei-lesen-und-validieren.html)

Cubysoft 16. Jul 2015 12:18

Binäre Datei lesen und validieren
 
Hallo,

in meinem Thread (http://www.delphipraxis.net/185891-b...s-streams.html) hatte ich ja das Problem mit dem schreiben und lesen von Unicode-Strings. Da sich das nun ja erledigt hat, stehe ich vor dem nächsten Problem und suche hierbei ein kleines Konzept.

Ich möchte, dass mein Programm merkt, wenn man eine Datei öffnet, die nicht das eigentliche Format hat. Ich habe mir dazu eine ganz einfach Möglichkeit ausgedacht, hoffe aber dass ihr bessere Ideen habt. Derzeit schreibe ich immer am Anfang und am Ende eine bestimmte Zahl (83423). Beim auslesen prüfe ich dann, ob diese beiden Zahlen vorhanden und korrekt sind. Wenn nicht ist die Datei in einem falschen Format

Habt ihr dazu eventuell ein paar Anregungen ? :)

frankyboy1974 16. Jul 2015 12:30

AW: Binäre Datei lesen und validieren
 
Hallo,

du möchtest also beim Lesen einer Datei wissen, ob du diese auch tatsächlich gespeichert hast. Verstehe ich das richtig? Also spontan würde mir dann ein Hash einfallen. Du berechnest nach einem bestimmten Algoritmus, einen Hashwert über den Inhalt deiner Daten (Als einfaches Beispiel zählst du die Anzahl der 'e' in der Datei, speicherst diesen Wert mit in der Datei). Wenn du die Datei wieder ausliest, überprüfst du die Anzahl. Stimmt diese nicht überein, lehnts du die Datei ab.

mfg

frank

BUG 16. Jul 2015 12:34

AW: Binäre Datei lesen und validieren
 
Zitat:

Zitat von Cubysoft (Beitrag 1308867)
Derzeit schreibe ich immer am Anfang und am Ende eine bestimmte Zahl (83423). Beim auslesen prüfe ich dann, ob diese beiden Zahlen vorhanden und korrekt sind. Wenn nicht ist die Datei in einem falschen Format

Das Konzept ist nicht neu und wird viel genutzt. Zusätzlich könnte man auch Checksummen benutzten, um beschädigte Dateien auszuschließen.

p80286 16. Jul 2015 12:37

AW: Binäre Datei lesen und validieren
 
kommt darauf an was Du erreichen willst.
Für's Erkennen sollte Deine Methode hinreichend sein. Wenn du auch das Format verifizieren willst, könntest Du z.B. den 13 und 7letzten Datensatz mit einem genau definierten Inhalt schreiben. (also brauchen wir mind. 14 Datensätze)
Soll jeder Datensatz verifiziert werden würde ich hierfür Prüfsummen nutzen.


Gruß
K-H

Mavarik 16. Jul 2015 13:22

AW: Binäre Datei lesen und validieren
 
Zitat:

Zitat von p80286 (Beitrag 1308874)
kommt darauf an was Du erreichen willst.

Genau...

Erkennung : Zum Beispiel : "Gif89" Magic am Anfang schreiben
Konsistenz : Checksumme über die Datei bilden. (Schütz vor Veränderungen im kleinen Rahmen)
Sicherheit : Checksumme bilden und Checksumme in unterschiedlicher Ausprägung in der Datei speichern.
(So kann verhindert werden, dass einer die Datei patched und die Checksumme gleich mit)
"Ganz Sicher" : (Gibt es zwar nicht) aber Verschlüsselung per AES oder vergleichbares...

Mavarik

Cubysoft 16. Jul 2015 20:45

AW: Binäre Datei lesen und validieren
 
Hey,

danke für die Zahlreichen Tipps :) Ich werde beides umsetzen. Eine Variable in den Header, um festzustellen, ob der Typ passt und eine Checksumme, die ich dann irgendwie berechne :) Da fällt mir bestimmt was ein :)

Dankeschön!

Aphton 16. Jul 2015 22:37

AW: Binäre Datei lesen und validieren
 
Eine Checksumme an sich brauchst du nicht wirklich. Checksummen werden für Datenintegrität verwendet, was hier ja ned der Fall ist.
Einfach ne Kennung am Anfang der Datei packen und beim Auslesen nachschauen, ob sie vorhanden ist.. as simple as that. Öffne ne (kleine) Exe Datei im Texteditor und du wirst merken, die ersten zwei Zeichen sind "MZ" was die initialien des Entwicklers dieses Formats (PE - portable executable files - exe/dll) ist. Könnte auch "MZ " sein.. So viel dazu

Rollo62 17. Jul 2015 20:04

AW: Binäre Datei lesen und validieren
 
Ich benutze z.B. für Binärdateien nur noch Streams, um diese dann per Filestream zu Speichern
oder per Blobstream in der DB zu Speicerhn etc.
Das ist für mich am universellsten.

Zusätzlich kann man damit sehr einfach schon vor dem Anfang der eigentlichen Nutzdaten noch FileVersion, Magic number und
was dir sonst noch so einfällt schreiben.
Jeweils sxhreibt man immer die aktuelle Fileversion beim Speichern.

Das hat den Vorteil das man beim Zurücklesen erstmal Version etc. kontrollieren kann,
und bei Bedarf beim weiteren Lesen der Daten auf die Änderungen in den Versionen reagieren kann.
Z.B. neue Datenfelder in der neuen Version generieren und/oder nicht mehr vorhandene Datenfelder
per Dummyread im Stream überlesen.

So kann man sehr bequem nicht nur Testen ob man das überhaupt die richtige Dateiversion hat,
man bekommt noch eine sehr sichere und einfache Verarbeitung für die verschiedenen Dateiversionen die
man über die Jahre mal produziert gratis dazu.

Rollo


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 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