![]() |
TFileStream - EOutOfMemory
Hi,
ich versuche eine Datei per FileStream auszulesen, aber ich bekomme immer einen EOutOfMemory Error und habe keine Ahnung was ich falsch mache. Die Testdatei ist im übrigen nicht mal ein Kb groß, zu ein einziger Satz.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var Stream: TFileStream; s: String; c: Cardinal; begin Stream := TFileStream.Create('C:\test.txt', fmOpenRead ); repeat Stream.Read(c, 4); // Größe einlesen SetLength(s, c); // Länge des Strings setzen Stream.Read(s[1], c); // String einlesen memo1.Lines.Add(s); until Stream.Position >= Stream.Size; Stream.Free; end; |
Re: TFileStream - EOutOfMemory
Zitat:
Ich habe mich mit Streams nie beschäftigt, aber ich gehe davon aus, daß sie die ersten 4 Zeichen der Datei aus der Datei in die Variable c kopiert. Wenn z.B. Die Datei mit dem Wort "Hallo" beginnt, dann würde ich erwarten, dann c dann den Wert $6C6C6148 (=1819042120) enthält. Das ist dann aber nicht die Länge der Zeile. |
Re: TFileStream - EOutOfMemory
hm, also eigentlich möchte ich die Datei zeichenweise einlesen. Ich bin offen für Vorschläge.
|
Re: TFileStream - EOutOfMemory
Ist denn das erste LongWord der Datei definitiv die Länge? Wenn da 12 Millionen o.ä. rauskommt, dann wird es mit dem String schnell zu gross beim SetLength. Schonmal debuggt auf Stringlängen er denn so kommt?
|
Re: TFileStream - EOutOfMemory
Moin,
ich glaube, dass die kleine Datei namens TEST.TXT eine reine Textdatei ist. Peter möchte wohl das zeilenweise Lesen mit einem FileStream an Stelle eines TextFile erledigen. Das zeilenweise Lesen von Textdateien geschieht immer auf die gleiche Weise: Einlesen eines Blocks, Suchen nach dem Zeilenende, Merken der gepufferten Dateiposition. Genau diese Funktionalität steckt in TextFile und muss in einer von TFileStram abgeleiteten Klasse nachgebaut werden. Längeninformationen gibt es in einer Textdatei nunmal nicht. Freundliche Grüße |
Re: TFileStream - EOutOfMemory
ah, ok, danke für die Informationen, ich befürchte ich hatte keine Ahnung was ich mit dem Stream eigentlich mache :roll:
|
Re: TFileStream - EOutOfMemory
Hallo,
wenn Du eine Textdatei zeilenweise lesen willst, versuche folgendes.
Delphi-Quellcode:
Viele Grüsse
procedure LoadFile
( iFileName : String ) ; var iTextFile : TextFile ; iTextLine : String ; begin { Ggf. Nicht vorhanden, abbrechen } if FileExists(iFileName) = FALSE then Exit ; { TextFile öffnen } AssignFile(iTextFile,iFileName) ; Reset(iTextFile) ; { Zeilenweise lesen und in iTextLine speichern } while not(EOF(iTextFile)) do begin ReadLn(iTextFile,iTextLine) ; end ; // while not { TextFile schliessen } CloseFile(iTextFile) ; end ; Tom |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05: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