![]() |
TFileStream Speichern nach Vergrößerung
Hallo leute,
bin gerade an einem neuen kleinen Projekt dran. Ich erkläre nur einmal ganz kurz die Funktion: Also ich habe jetzt die Größe einer Datei als MD5 Hash. Jetzt möchte ich eine belibige Datei in mein Programm laden, die ein wenig kleiner ist als meine Original Datei. Sprich: Original Datei = 5 MB Datei2 = 4,5 MB Wenn ich nun Datei2 in mein Programm lade, wird von der Größe dieser Datei ein MD5 Hash erstellt. Sollte dieser Hash nun gleich sein mit dem Hash der Original Datei, dann soll die Datei gespeichert werden. Sollte der MD5 Hash nicht gleich sein, wir gehen davon aus, das die Datei2 kleiner ist, dann soll auf die Datei 1 Bit daz addiert werden und wieder von der neuen Größe der MD5 Hash erstellt werden. Und das so lange, bis eben die beiden Hashs gleich sind. Soweit ist das ganze auch kein Problem. Hier mal ein wenig Code von mir:
Delphi-Quellcode:
Sollte klar sein.
var lstream : TFileStream;
Delphi-Quellcode:
Hier wähle ich eine Datei aus, und lade sie auf lStream.
begin
Opendialog1.Execute(); try lStream := TFileStream.Create(OpenDialog1.Filename, fmOpenReadWrite);
Delphi-Quellcode:
Und hiermit erhöhe ich die Größe der Datei immer um 1 Bit.
lstream.Size := lstream.Size + 1
Sollte soweit richtig sein, hoffe ich^^. Nunja jetzt zu meinem Problem. Wenn nun die beiden Hashs übereinstimmen, soll die Datei Natürlich gespeichert werden. Nur wie mache ich das jetzt? Habe schon
Delphi-Quellcode:
probiert, aber dann wird immer nur eine leere Datei erstellt, die 0 Byte groß ist.
lstream := TFileStream.Create('E:\MD5 After.txt', fmCreate);
Die Datei die ich auf lStream lade (in meinem falle eine Textdatei) steht aber "1234567890" drin. Also sollt doch auch wenigstens das nach dem speichern auch wieder drin stehen. Könnt ihr mir helfen? |
Re: TFileStream Speichern nach Vergrößerung
Du redest von Filestreams und von Speichern. Wenn du etwas an einem TFileStream änderst ist das sofort geändert und nichts muss extra gespeichert werden. Mit TFileStream bearbeitest du die Datei sozusagen direkt.
Des weiteren schreibst du Zitat:
|
Re: TFileStream Speichern nach Vergrößerung
Moin SyntaxXx,
was soll das eigentlich werden, wenn's fertig ist? Der MD5-Hash-Wert über die Grösse (als String?) sollte erst dann gleich sein, wenn die Grösse gleich ist. |
Re: TFileStream Speichern nach Vergrößerung
Also der Hauptsinn des Programmes ist es, 2 genau gleich große Dateien zu haben.
Wobei eine der Dateien erst einmal auf die größe geändert werden muss. Und um eben die exacte größe zu bekommen, verwende ich eben den MD5 Hash. @ SirThornberry Also die Datei soll ich sag mal aufgepumpt werden. Die Datei bleibt gleich, nur eben die Größe ändert sich. Hmmm blöd das zu erklären. Was eben wichtig ist, wenn eine Datei 1000 Bit groß ist und die andere 1001 Bit, dann bekomme ich 2 verschiedene Hashs. Und das ist eben das Problem. Die größe muss aufs Bit genau überein stimmen. Ich will nur die größe neu setzen. |
Re: TFileStream Speichern nach Vergrößerung
Ich steig da überhaupt nicht durch. Wozu den Hash, wenn es nur um die Dateigröße geht? Und eine Datei mit genau 1001 Bit kann es nicht geben, da Byte die kleinste Einheit ist.
|
Re: TFileStream Speichern nach Vergrößerung
Also einer macht hier gerade ein Denkfehler.
Soweit ich mich entsinnen kann siehts wie folgt aus: 1 Byte = 8 Bit 1 Kilobyte = 1024 Byte 1 Megabyte = 1024 Kilobyte Also ist Bit doch die kleinste Einheit. |
Re: TFileStream Speichern nach Vergrößerung
Zitat:
|
Re: TFileStream Speichern nach Vergrößerung
Wenn Du es schaffst, eine 1 Bit große Datei anzulegen, geb ich Dir gerne einen aus.
|
Re: TFileStream Speichern nach Vergrößerung
Wobei ich mich wirklich noch immer Frage, was denn der hash in diesem Beispiel verloren hat. Zwei gleich große Dateien mit unterschiedlichem Inhalt werden mit an Sicherheit grenzender Wahrscheinlichkeit einen komplett anderen md5-Hash produzieren.
Falls es wirklich nur darum geht, die Dateigröße der kleineren an die der größeren anzugleichen, würde ich folgendes machen: 1. Differenz von GroesseDatei1 und GroesseDatei2 bestimmen (sei Hier DiffFileSize) 2. An den FileStream der kleineren Datei z.B. Leerzeichen (DiffFileSize Stück) hinzufügen Grüsse |
Re: TFileStream Speichern nach Vergrößerung
Ja eben, deshalb ja meine Verwunderung.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 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