AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi TFileStream Speichern nach Vergrößerung
Thema durchsuchen
Ansicht
Themen-Optionen

TFileStream Speichern nach Vergrößerung

Ein Thema von SyntaxXx · begonnen am 4. Apr 2010 · letzter Beitrag vom 4. Apr 2010
Antwort Antwort
Seite 1 von 2  1 2      
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#1

TFileStream Speichern nach Vergrößerung

  Alt 4. Apr 2010, 16:09
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:

var lstream : TFileStream; Sollte klar sein.
Delphi-Quellcode:
begin
 Opendialog1.Execute();
 try
 lStream := TFileStream.Create(OpenDialog1.Filename, fmOpenReadWrite);
Hier wähle ich eine Datei aus, und lade sie auf lStream.

lstream.Size := lstream.Size + 1 Und hiermit erhöhe ich die Größe der Datei immer um 1 Bit.


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 lstream := TFileStream.Create('E:\MD5 After.txt', fmCreate); probiert, aber dann wird immer nur eine leere Datei erstellt, die 0 Byte groß ist.

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?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: TFileStream Speichern nach Vergrößerung

  Alt 4. Apr 2010, 16:42
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:
...dann soll auf die Datei 1 Bit daz addiert werde...
Du weißt aber schon das du ein einzelnes Bit nicht speichern kannst sondern nur ganze Bytes?! Und was meinst du mit "auf die Datei addiert werden"? Soll der Inhalt der Datei irgendwie um ein Bit verschoben werden? Oder willst du die Dateigröße neu setzen (wobei wie gesagt nur ganze Bytes möglich sind)?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: TFileStream Speichern nach Vergrößerung

  Alt 4. Apr 2010, 16:50
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#4

Re: TFileStream Speichern nach Vergrößerung

  Alt 4. Apr 2010, 16:58
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#5

Re: TFileStream Speichern nach Vergrößerung

  Alt 4. Apr 2010, 17:04
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#6

Re: TFileStream Speichern nach Vergrößerung

  Alt 4. Apr 2010, 17:08
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.
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: TFileStream Speichern nach Vergrößerung

  Alt 4. Apr 2010, 17:11
Zitat von SyntaxXx:
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.
Er meinte, Byte ist die kleinste Einheit mit welcher TFileStream und somit die Datei angesprochen werden kann natürlich ist das Bit die kleinste Einheit aber im Beispiel eben nicht praktikabel
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

Re: TFileStream Speichern nach Vergrößerung

  Alt 4. Apr 2010, 17:12
Wenn Du es schaffst, eine 1 Bit große Datei anzulegen, geb ich Dir gerne einen aus.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: TFileStream Speichern nach Vergrößerung

  Alt 4. Apr 2010, 17:17
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
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#10

Re: TFileStream Speichern nach Vergrößerung

  Alt 4. Apr 2010, 17:19
Ja eben, deshalb ja meine Verwunderung.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 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