![]() |
Fehler beim String-streamen [Erledigt]
Hi, ich möchte nen String in ne TXt-Datei streamen (so dass dann da normaler text steht)(der string soll vorger verändert werden, darum geht das memo1.savetofile nit)
Hab hier im forum auch gesucht und bin fündig gworden. Mein Code sieht nun folgendermaßen aus
Delphi-Quellcode:
der stürzt aber immer mit er Exception Stream-Write-Error ab, sobalt der in die for-Schleife geht und zeigt mir dann als Fehlerstelle das end;
procedure TForm1.SaveToFile(FileName: String);
var Stream: TFileStream; Text: String; TextLen,i: Integer; begin Stream := TFileStream.Create(FileName, fmCreate); for i := 0 to memo1.Lines.Count do begin TextLen:=Length(memo1.Lines.Strings[i]); Stream.WriteBuffer(TextLen,SizeOf(Integer)); Stream.WriteBuffer(Pointer(Text)^,TextLen); end; <--Hier fehlermeldung stream.Destroy; end; Was mache ich hierbei falsch? |
Re: Fehler beim String-streamen (stream-write-error)
Versuche mal for i := 0 to memo1.Lines.Count -1 do
|
Re: Fehler beim String-streamen (stream-write-error)
Lass die Schleife mal bis Count-1 laufen. Count Zeilen gibt es nicht. Es wird bei null angefangen zu zählen. Und dann fehlt der Ressourcenschutzblock und nimm nicht die Methode Destroy zum Freigeben des Streams, sondern Free bzw. FreeAndNil. Free prüft vorher, ob das Objekt auch existiert. Destroy tut das nicht und wenn es nicht erzeugt werden konnte, fliegt dir bei Destroy alles um die Ohren:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Stream : TFileStream; Text : string; TextLen, i : Integer; begin Text := 'Hello World'; Stream := TFileStream.Create('d:\test.txt', fmCreate); try for i := 0 to 10 do begin TextLen := i; Stream.WriteBuffer(TextLen, SizeOf(Integer)); Stream.WriteBuffer(Pointer(Text)^, length(Text)); end; finally FreeAndNil(stream); end; end; |
Re: Fehler beim String-streamen (stream-write-error)
Der fehler lag woanders, ich hab zwar die lenge des strings geprüft, der variable text aber nicht den String gegeben
|
Re: Fehler beim String-streamen (stream-write-error)
Allerdings schreibt der jetzt an den anfang immer so en symbol und ein paar leerzeichen
Delphi-Quellcode:
kann man das irgendwie verhindern, und wie kann ich da angeben, dass der eine neue zeile nimmt., normal würd ich dass ja über #13 machen, wüsst aber nit, wei ich dass da einbringen sollte?
1 ---> 3 1 ---> 2
Edit: de zeichen vorher kann ich entfernen, indem ich beim schreiben folgende zeile wecklasse
Delphi-Quellcode:
der trägt das alles ein, nur dass er die überflüssigen zeichen am anfang jeweils wecklässt. Warum wird dass dann überhaupt verwendet?
Stream.WriteBuffer(TextLen,SizeOf(Integer));<-- die lass ich weg
Stream.WriteBuffer(Pointer(Text)^,TextLen); Edit2: hatte was beim zeilenumbruch vergessen :roll: |
Re: Fehler beim String-streamen [Erledigt]
Hoi
Es wäre besser, wenn Du dir eine zweite StringList nimmst und die Memo1.Lines da reinkopierst. Dort kannst Du dann deine Änderungen vornehmen und die Strings schliesslich wie beim Memo mit SaveToFile speichern. Ein FileStream ist eher für binäre Daten gedacht. Gruss Shaman |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 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