Autor Beitrag
Martin77
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 282

XP Prof
D6 Prof, D7 Personal, D7 Enterprise, D8 personal
BeitragVerfasst: Sa 20.03.04 14:42 
Hallo, ich habe da nen kleines Problem, ich möchte gerne einen Stream "manipulieren"

Kleiner Ausflug in den Background:
Ich packe und Verschlüssele Dateien und möchte bei diesen gerne einige Infroamtionen mitspeichern, z.B. originaldateiname,.....

Ich habe jetzt einen TFileStream mit meiner geöffneten Datei und möchte im Prinzip einen anderen Stream mit meinen Zusatzinfos + dem FileStream haben.

Da Ich allerdings noch kaum was mit Streams gemacht habe weiss ich nicht wie ich anfangen/weitermachen soll.

So schaut es bisher aus:



Outputstream ist ein StringStream und InStream ist vom Typ TStream, da ich nciht sicherstellen kann das es bei FileStreams bleibt.

ausblenden Delphi-Quelltext
1:
2:
    outStream.WriteString('DATEI|'+QuellDateiName+'|'+HashCode+'|');
    outStream.Write(inStream,inStream.Size);


Das Write am Ende schreibt mir nur unleserliche ZEichen in meinen Stream. Hat jemand vielleicht einen kleinen Tip für mich, würde mich freuen.


Gruß Martin
KidPaddle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 351

WinXP,Linux
D7 Prof, XE7
BeitragVerfasst: So 21.03.04 09:19 
Hallo,

ausblenden Delphi-Quelltext
1:
outStream.Write(inStream,inStream.Size);					


damit wird nicht der Stream - Inhalt, sondern das Stream - Objekt in den Stream geschreiben, plus einige Daten, die nach dem Stream - Objekt kommen, hängt von inStream.Size ab.

So kopierst Du einen Stream um:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure NoName(inStream, outStream : TStream; ...... );
var
  iBytes           : Integer;
  Buffer           : array[0..1023] of Char;
begin
  outStream.WriteString('DATEI|'+QuellDateiName+'|'+HashCode+'|');  
  repeat
    iBytes := inStream.Read(Buffer, SizeOf(Buffer));
    if (iBytes > 0) then begin
      outStream.Write(Buffer, iBytes);
    end;
  until (iBytes <> SizeOf(Buffer);
end;


Gruß
KidPaddle
Martin77 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 282

XP Prof
D6 Prof, D7 Personal, D7 Enterprise, D8 personal
BeitragVerfasst: Mo 22.03.04 19:19 
Cool, das ist genau das was ich gesucht habe, funktioniert einwandfrei.

Vielen vielen Dank!

Und wie kann ich meine Zusatzinfos wieder herausfiltern? Byteweise auslesen, oder gibts da noch nen Trick? ;)
KidPaddle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 351

WinXP,Linux
D7 Prof, XE7
BeitragVerfasst: Di 23.03.04 11:39 
Den ersten Teil kannst Du mit ReadString auslesen, was der Rest des Streames angeht, kann ich nicht sagen, da ich nicht weis, was damit passiert. Normalerweise reichst Du nach dem auslesen deiner Information das Stream-Objekt weiter an das Objekt, welches die weitere Verarbeitung macht.

Gruß
KidPaddle
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 04.04.04 09:46 
informiere dich mal über den TWrite und den TReader das sind pracktische klassen, für den TFileStream gebraucht *G*

_________________
MFG
Michael Springwald, "kann kein englisch...."