AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Inhalt wird nicht gespeichert?

Ein Thema von mo_greene · begonnen am 18. Jun 2008 · letzter Beitrag vom 18. Jun 2008
Antwort Antwort
Seite 2 von 2     12   
mo_greene

Registriert seit: 10. Dez 2006
Ort: Berlin
136 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Inhalt wird nicht gespeichert?

  Alt 18. Jun 2008, 22:07
Zitat von mkinzler:
Warum nicht? Dem Code nach heißt die Klasse cock
Ja, wie gesagt, dass war nur eine Sache die ich hier im Forum geändert hatte. Im Programm ist dieser Aufruf richtig.


Selbst wenn das Programm hier ist:

  FS.Write(GesMenge,sizeOF(GesMenge)); Befindet sich in der Variable GesMenge der richtige Wert

@ FAlter, Könntest du mir das genauer erläutern, was du geschrieben hast?
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#12

Re: Inhalt wird nicht gespeichert?

  Alt 18. Jun 2008, 22:09
Hi,

um Strings in einen Stream zu schreiben, hab ich folgenden Classhelper:

Delphi-Quellcode:
unit uclasshelpers;

interface

uses
  Classes;

type
  // Klassenhelfer für den TStream um Strings komfortabel lesen und schreiben zu können
  TStreamHelper = class helper for TStream
  public
    procedure WriteString(const aString: string);
    function ReadString: string;
  end;

implementation

{ TStreamStringWriter }

// Liest einen String aus und gibt ihn zurück
function TStreamHelper.ReadString: string;
var
  len: Integer;
begin
  ReadBuffer(len, SizeOf(Integer));
  SetString(Result, PChar(nil), len);
  ReadBuffer(Pointer(Result)^, len);
end;

// Schreibt einen String in den Stream
procedure TStreamHelper.WriteString(const aString: string);
var
  len: Integer;
begin
  len := Length(aString);
  WriteBuffer(len, SizeOf(Integer));
  WriteBuffer(PChar(aString)^, len);
end;

end.
  Mit Zitat antworten Zitat
mo_greene

Registriert seit: 10. Dez 2006
Ort: Berlin
136 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Inhalt wird nicht gespeichert?

  Alt 18. Jun 2008, 22:11
Ja nur ich versteh ich nicht wo mein Fehler liegt, wenn es sonst mit den anderen Elementen funktioniert? In der dat Datei steht alles richtig drin, nur dieser eine Wert des einen Edit-Feldes fehlt!?

Beim lesen findet er dann diesen Wert nicht mehr:

FS.Read(GesMenge, sizeOF(GesMenge));
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: Inhalt wird nicht gespeichert?

  Alt 18. Jun 2008, 22:12
Ist GesMenge eine Eigenschaft der Klasse? Typ?
Zitat:
@ FAlter, Könntest du mir das genauer erläutern, was du geschrieben hast?
sizeOf() eines Zeigers ergibt immer 4. Dürfte bei einem String dank compiler magic nicht passieren.
Beim lesen findet er den Wert nicht mehr:
FS.Read(GesMenge, sizeOF(GesMenge)); Ist ja auch logisch. Vor dem Lesen ist der String auch leer. Du musst die Länge mit in den Stream speichern. Zudem würde ich bei Strings die Länge und nicht sizeOf nehmen.
Markus Kinzler
  Mit Zitat antworten Zitat
mo_greene

Registriert seit: 10. Dez 2006
Ort: Berlin
136 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Inhalt wird nicht gespeichert?

  Alt 18. Jun 2008, 22:13
GesMenge ist in der selben Klasse in der auch die Speicher-Prozedur aufgerufen wird.
  Mit Zitat antworten Zitat
mo_greene

Registriert seit: 10. Dez 2006
Ort: Berlin
136 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Inhalt wird nicht gespeichert?

  Alt 18. Jun 2008, 22:22
Zitat von mkinzler:
Ist ja auch logisch. Vor dem Lesen ist der String auch leer. Du musst die Länge mit in den Stream speichern. Zudem würde ich bei Strings die Länge und nicht sizeOf nehmen.
Ja ok, aber warum funktioniert es mit allen, außer mit dem einen?

Delphi-Quellcode:
procedure TAuto.InDateiSchreiben (var Fs : TFilestream);
(* -------------------------------------------------------------------- *)
var
  i : integer;
begin
  FS.Write(Name, sizeOF(Name));
  FS.Write(Kennzeichen, sizeOF(Kennzeichen));
  FS.Write(GeschGer, sizeOF(GeschGer));
  FS.Write(Farbe, sizeOF(Farbe));
  FS.Write(Preis, sizeOF(Preis));
  FS.Write(DX, sizeOF(DX));
  FS.Write(GesMenge,sizeOF(GesMenge)); //wird, wie gesagt nicht gespeichert :(
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz