Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehler beim String-streamen [Erledigt] (https://www.delphipraxis.net/35054-fehler-beim-string-streamen-%5Berledigt%5D.html)

Thorben86 1. Dez 2004 22:23


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:
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;
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;

Was mache ich hierbei falsch?

ALTF4 1. Dez 2004 22:42

Re: Fehler beim String-streamen (stream-write-error)
 
Versuche mal for i := 0 to memo1.Lines.Count -1 do

Luckie 1. Dez 2004 22:44

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;

Thorben86 1. Dez 2004 22:53

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

Thorben86 1. Dez 2004 22:57

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:
   1 ---> 3   1 ---> 2
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?



Edit:
de zeichen vorher kann ich entfernen, indem ich beim schreiben folgende zeile wecklasse

Delphi-Quellcode:
Stream.WriteBuffer(TextLen,SizeOf(Integer));<-- die lass ich weg
Stream.WriteBuffer(Pointer(Text)^,TextLen);
der trägt das alles ein, nur dass er die überflüssigen zeichen am anfang jeweils wecklässt. Warum wird dass dann überhaupt verwendet?

Edit2: hatte was beim zeilenumbruch vergessen :roll:

Shaman 2. Dez 2004 06:51

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