Entwickler-Ecke

Dateizugriff - Daten aus TFileStream lesen


G-McKree - Mi 14.01.04 20:22
Titel: Daten aus TFileStream lesen
ich bin grad dabei mit TFileStreams rumzuexperimentieren, eigentlich mit dem hintergrundgedanken mal einen installer o.ä. zu schreiben. Also hab ich irgenteine *.exe genommen (is sogar von wem hier in forum) und an diese datei mal daten angefügt, ob sie dann noch funzt. Das geht. Dann wollte ich die daten am ende der datei lesen -> geht nicht. Hier mal der source (unordentlich und teilweise unnötig):

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.FormCreate(Sender: TObject);
var st0,st1,st2: tfilestream;
p: pointer;
s: string;
begin
st0:= tfilestream.Create('E:\temp\delphi\apiclock\apiclock\apiclock.exe', fmopenread);
st1:= tfilestream.create('e:\temp\teststream.exe', fmcreate);
st1.CopyFrom(st0,0);
st0.free;
st1.Write('test',4);
st1.free;
st2:= tfilestream.create('e:\temp\teststream.exe', fmopenread);
st2.Position:= st2.size - 4;
//showmessage(inttostr(st2.position));
st2.Read(p, 4);

showmessage(^p);
application.Terminate;
end;


egal an welcher position ich lese, es kommt immer so ein kreuz-zeichen raus. und ich wüsste nun gern wie ich das 'test' am ende der datei zu lesen bekomme


Delete - Mi 14.01.04 20:39

Du musst dir irgendwie merken, wo die Exe aufhört und deine angehängte Datei anfängt. Und dann ab da lesen. Du könntest dir mal mein SFXTool von meiner HP ankucken. Arbeitet zwar ohne TFileStream aber das Prinzip ist das gleiche.


G-McKree - Mi 14.01.04 20:44

das hab ich doch bei //st2.Position:= st2.size - 4;// gemacht
jedenfalls denk ich dass das funzt, da ich ja 4 bytes geschrieben habe und ab dem 4. byte von hinten lese

oder nicht?

mir gings eigentlich darum, das die position egal is, da immer dieses kreuz-zeichen angezeigt wird, was ich komisch finde, da, wenn ich nicht irre 4 zeichen angezeigt werden müssten (und zwar nicht immer die gleichen)


G-McKree - Mi 14.01.04 21:45

nun, das problem, dass ich nur 4 bytes lesen kann hab ich behoben, aber jetzt kommt bei lesen immer eine access violation