![]() |
Problem beim einlesen einer Datei in einen Stream
Hi Leute,
hab leider wieder ein kleines Problem. Ich will eine Datei in einen Stream einlesen. Meine Pfadangabe stimmt auf jeden Fall, hab ich bereits gecheckt. Wenn ich es ausführe bekomme ich eine Exception der Klasse ERangeError "Fehler bei Bereichsprüfung". Ich kenne mich mit Streams nicht so gut aus und habe das ganze aus einem Tutorial. Kann mir einer sagen was ich falsch mache?
Delphi-Quellcode:
type
TDatensatz = record ID: integer; Name: AnsiString; end; TDatenArray = array of TDatensatz; procedure TForm1.Button1Click(Sender: TObject); var Daten: TDatenArray; Stream: TStream; I: integer; Len: LongInt; begin Stream := TFileStream.Create(Sett_QIPPath + '\Users\' + Sett_ICQNumber + '\History\' + HistoryData[2].FileName, fmOpenRead); try Stream.Read(Len, SizeOf(Len)); SetLength(Daten, Len); for I := 0 to Len - 1 do begin Stream.Read(Daten[I].ID, SizeOf(Daten[I].ID)); Stream.Read(Len, SizeOf(Len)); SetLength(Daten[I].Name, Len); Stream.Read(PChar(Daten[I].Name)^, Len); end; finally Stream.Free; end; //ShowData(Daten); end; |
Re: Problem beim einlesen einer Datei in einen Stream
An welcher Stelle tritt der Fehler auf?
|
Re: Problem beim einlesen einer Datei in einen Stream
Weiß ich nicht genau, wenn ich auf Anhalten gehe, zeigt er mir leider nicht die Stelle an, bei der das ganze passiert.
|
Re: Problem beim einlesen einer Datei in einen Stream
Der Typecast zum PChar erscheint mir etwas umständlich... versuch doch stattdessen mal
[i]Stream.Read(Daten.Name[1], Len); PS: Warum ist Len ein LongInt und kein LongWord/Cardinal? Erwartest Du negative Zeichenlängen? ;) PPS: Wenn man mit F7/F8 durchsteppt, merkt man doch, wann der Fehler erscheint ;) |
Re: Problem beim einlesen einer Datei in einen Stream
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
SetLength(Daten, Len);
***EDIT*** SizeOf gibt einen SmallInt zurück, kanns sein dass der zu klein is? Wenn ja, wie kann ich das denn anders lösen? |
Re: Problem beim einlesen einer Datei in einen Stream
Hab mit Streams auch noch net so viel gemacht aber evtl. isses ja nur:
var Stream: TStream; begin Stream := TFileStream.Create(....); :gruebel: BTW: hab mal gelesen, daß man aus gründern der Kompatibilität keine Generischen Typen Speichern soll. (Integer = Generisch -> nicht in jeder Delphiversion gleich) EDIT: BTW: Sind die roten Kästen deaktiviert!? |
Re: Problem beim einlesen einer Datei in einen Stream
Zitat:
|
Re: Problem beim einlesen einer Datei in einen Stream
Da TFileStream ein Enkel von TStream ist, dürfte das eigentlich kein Problem bedeuten.
Stream.Read(stringvariable[1], stringlaenge) benutze ich vielfach problemlos. SizeOf(was?) gibt einen SmallInt zurück? Zitat:
Zitat:
Warum aber bei Dir SizeOf(Len) = SizeOf(SmallInt) und nicht SizeOf(LongInt) (wenn ich das jetzt richtig verstanden habe) kann ich auch nicht beantworten :shock: |
Re: Problem beim einlesen einer Datei in einen Stream
Zitat:
|
Re: Problem beim einlesen einer Datei in einen Stream
Delphi-Quellcode:
An der Stelle sollte es eigentlich schon knallen. Versuch mal
Stream.Read(Len, SizeOf(Len));
Delphi-Quellcode:
;)
Stream.Read(@Len, SizeOf(Len));
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 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