Entwickler-Ecke
Dateizugriff - Stream als String?
Slowmo - Do 19.01.06 19:02
Titel: Stream als String?
Ich verzweifel hier bald ... ich möchte einen Stream als String auslesen, den String in ein Bitmap verschlüsseln, die Bitmap speichern, später wieder laden entschlüsseln und den String in einen Stream speichern, doch irgendwie will das nicht funktionieren. Hier mal der Quellcode:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure EncryptStream(Source, Dest: TStream; cl:Byte); var s: string; Buffer: TBitmap; begin SetLength(s, Source.size); Source.Read(pChar(s)^, Source.size); Buffer:=TBitmap.Create; Buffer:=Encrypt(s, cl); Buffer.SaveToStream(Dest); Buffer.Free; end;
procedure DecryptStream(Source, Dest: TStream; cl:Byte); var Buffer: TBitmap; s: String; begin Buffer:=Tbitmap.Create; Buffer.LoadFromStream(Source); s:=Decrypt(Buffer, cl); Buffer.Free; Dest.Write(s, length(s)); end; |
Die Verschlüssel- und Entschlüsselfunktionen funktioieren einwandfrei (getestet), es muss also an diesem Stück Quellcode liegen.
Heiko - Do 19.01.06 19:13
Hast du es schon eimal ohne Zeigern probiert? Denn da liegt manchmal eine Fehlerquelle. Wenn man einfache Strings nimmt, muss man noch den Zeiger auf das erste Zeichen setzten (ich weiß nicht, ob dein Zeiger hier auf den 0 oder 1 Byte zeigt, da ja das 0 für die Länge reserviert ist).
BenBE - Do 19.01.06 19:27
Titel: Re: Stream als String?
Probier mal:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| procedure EncryptStream(Source, Dest: TStream; cl:Byte); var s: string; Buffer: TBitmap; begin SetLength(s, Source.size); Source.Read(s[1], Source.size); Buffer:=Encrypt(s, cl); try Buffer.SaveToStream(Dest); finally Buffer.Free; end; end;
procedure DecryptStream(Source, Dest: TStream; cl:Byte); var Buffer: TBitmap; s: String; begin Buffer:=TBitmap.Create; try Buffer.LoadFromStream(Source); s:=Decrypt(Buffer, cl); finally Buffer.Free; end; Dest.Write(s[1], length(s)); end; |
Falls er bei s[1] meckert: Einfach ein @ davor ergänzen --> @s[1] ...
Slowmo - Do 19.01.06 19:41
Also das hat leider nichts geändert, die beiden Stream sind am Ende immer nocht nicht die selben...
WASEO - Do 19.01.06 19:43
Die Methode mit dem Buffer ist etwas umständlich. Wesentlich einfacher geht's mit TStringStream. Der hat die Eigenschaft DataString, in welcher der gesamte Stream als String abgelegt ist. Den Inhalt ann man dann leicht einem String zuweisen und ver- bzw. entschlüsseln und zu weiteren Zwecken verwenden.
Ansonsten schaumalguckeda:
http://www.swissdelphicenter.ch/de/showcode.php?id=1268
Slowmo - Fr 20.01.06 18:17
Hat sich inzwischen erledigt, ich steig dabei zwar nich ganz durch, es muss aber am Speichern der Bitmap in einen Stream gelegen haben. Jetzt speicher ich die bitmap einfach in einer Datei und es funktioniert.
Trotzdem: Danke für die Hilfe.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!