AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein EReadError beim Lesen der mit TWriter geschriebenen Daten
Thema durchsuchen
Ansicht
Themen-Optionen

EReadError beim Lesen der mit TWriter geschriebenen Daten

Ein Thema von DualCoreCpu · begonnen am 4. Aug 2015 · letzter Beitrag vom 4. Aug 2015
 
DualCoreCpu
(Gast)

n/a Beiträge
 
#12

AW: EReadError beim Lesen der mit TWriter geschriebenen Daten

  Alt 4. Aug 2015, 14:05
vielleicht hilft diese Routine:
Wohl kaum! Das würde voraussetzen, daß die Daten auch in diesem Format abgespeichert wurden, was hier aber nicht der Fall ist.

@DualCoreCpu: Kannst du die Datei einfach mal hier anhängen? Dann kann auch mal jemand anders versuchen, die einzulesen.
Ok, will es versuchen. Obwohl Endung .txt, ist es keine reine Textdatei, nur meine ursprüngliche Dateiendung .def akzeptiert der hiesige Uploader nicht.

Um die LoadFromStream() Methode von @Klaus einsetzen zu können, musste ich die Testdaten unter Deaktivierung der Lesemethode nochmals schreiben.

Vorher fehlte das Listenendezeichen $00 und das ListBegin Zeichen $01. Alles andere (Kennzeichnung $06 und Längenbyte vor dem String, dann der eigentliche String, war schon vorher da.

Das hier sind jetzt die wesentlichen Änderungen:

Delphi-Quellcode:
procedure TForm1.btnOkClick(Sender: TObject);
var Directory: String;
begin
  Directory := GetCurrentDir;
  if Directory[Length(Directory)]<>'\then Directory := Directory + '\';
  FStream := TFileStream.Create(Directory+'Testfile.def', fmCreate);
  SaveToStream(FStream);
  { So hatte ich es vorher
  FFileWriter.WriteListBegin;
  FFileWriter.WriteString(FTestFields.Feld1);
  FFileWriter.WriteString(FTestFields.Feld2);
  FFileWriter.WriteString(FTestFields.Feld3);
  FFileWriter.WriteListEnd;
  }

end;
Hier FormCreate:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var Directory: String;
begin
  //Erzeugen des Streams zum Lesen
  Directory := IncludeTrailingPathDelimiter(ExtractFilePath(Paramstr(0)));
  //ShowMessage(Directory); wird richtig angezeigt.

  FReader := TFileStream.Create(Directory+'TestFile.def', fmOpenRead, fmShareDenyWrite);

  //Lesen der Daten
  LoadFromStream(FReader);

  //Überprüfen, ob richtig gelesen
  Edit1.Text := FTestFields.Feld1;
  Edit2.Text := FTestFields.Feld2;
  Edit3.Text := FTestFields.Feld3;
  //Inhalt stimmt anschließend
end;
und hier die Lese- und Schreibmethode:

Delphi-Quellcode:
procedure TForm1.LoadFromStream(const Stream: TStream);
var Reader: TReader;
begin
  Reader := TReader.Create(Stream, $0FFF);
  Reader.ReadListBegin;
  while not Reader.EndOfList do
  begin
  FTestFields.Feld1 := Reader.ReadString;
  FTestFields.Feld2 := Reader.ReadString;
  FTestFields.Feld3 := Reader.ReadString;
  end;
  FreeAndNil(Reader);
  Stream.Free; //sonst EfOpenError beim nächsten Öffnen für Schreiben!!!
end;

procedure TForm1.SaveToStream(const Stream: TStream);
var
  Writer: TWriter;
begin
  Writer := TWriter.Create(Stream, $0FFF);
  Writer.WriteListBegin;
  Writer.WriteString(Edit1.Text);
  Writer.WriteString(Edit2.Text);
  Writer.WriteString(Edit3.Text);
  Writer.WriteListEnd;
  FreeAndNil(Writer);
  Stream.Free;
end;
Mit diesen Methoden funktioniert es jetzt. Danke wie verrückt Euch allen! ))))

P.S. Wollte eigentlich nen schönen Smilie eifügen, geht aber beim Nachbearbeiten nicht. schade!
Angehängte Dateien
Dateityp: txt Testfile.txt (63 Bytes, 1x aufgerufen)

Geändert von DualCoreCpu ( 4. Aug 2015 um 20:31 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:24 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