Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Speicherung von typirisierten Dateien (https://www.delphipraxis.net/41444-speicherung-von-typirisierten-dateien.html)

Amalkotey 3. Mär 2005 13:22


Speicherung von typirisierten Dateien
 
Hallo DPler,

ich schreibe zur Zeit ein Programm, welches Anwenderdaten verwalten soll. Die Daten werden in einem Record gespeichert, welche als Klassse aufgebaut wurde.

Delphi-Quellcode:
Type
  TUser = Record
    Name   : String[48];
    Rechte : Byte;
    Passwort: String[15];
  End;
  TPWClass = Object
    User: TUser;
    Constructor Setzen(cName: String; cRechte: Byte; cPasswort: String);
    Procedure Speichern(FileName: String; UserID: Integer);
    Procedure UserKill(FileName: String);
    Function GetUserFile(AppName: String): String;
    Function Lesen(FileName: String; Position: Integer): Boolean;
  End;

Var
  UserDB: TPWClass;
Die einzelnen Records werden mit der nachfolgenden Procedure auf die HDD gespeichert:

Delphi-Quellcode:
Procedure TPWClass.Speichern;
Var
  FUserDat: File Of TUser;

Begin
  AssignFile(FUserDat, FileName);
  {$I-}
    FileMode := 1;
    Reset(FUserDat);
    If IOResult <> 0 Then
      ReWrite(FUserDat);
  {$I+}
  Seek(FUserDat, UserID);
  Write(FUserDat, User);
  CloseFile(FUserDat);
End;
Und mit der nachfolgenden Funktion bei Programmstart geladen:

Delphi-Quellcode:
Function TPWClass.Lesen;
Var
  FUserDat: File Of TUser;

Begin
  AssignFile(FUserDat, FileName);
  {$I-}
    FileMode := 0;
    Reset(FUserDat);
    If IOResult <> 0 Then Begin
      CloseFile(FUserDat);
      Result := False;
      Exit;
    End;
  {$I+}
  Seek(FUserDat, Position);
  {$I-}
    Read(FUserDat, User);
    If IOResult <> 0 Then
      Result := False
    Else
      Result := True;
  {$I+}
  CloseFile(FUserDat);
End;
Soweit funktioniert alles. Aber, wenn man sich die Ausgabedatei über einen Hexmonitor anschaut, fällt auf, das im Record zwei, Reste von Record eins zufinden sind (s. Bild).

2 Records geschrieben: http://www.esdaso.de/dp-forum/ds2.jpg

Warum finde ich die Reste? Kann mir jemand von euch das sagen? Wie kann ich das vermeiden?

Für euere Hilfe wäre ich dankbar.

Mfg
Amalkotey

Luckie 3. Mär 2005 13:31

Re: Speicherung von typirisierten Dateien
 
Initialisiere vorher die ShortStrings mit #0, dann solle der Speicher auch leer sein. Hier wird es erklärt, was passiert:
http://www.delphi-forum.de/viewtopic...=224919#224919

BTW habe ich auf meiner HJomepage schon so eine Klasse: http://www.luckie-online.de/Delphi/Sonstiges/ -> TypedFiles

Amalkotey 3. Mär 2005 14:33

Re: Speicherung von typirisierten Dateien
 
Zitat:

Zitat von Luckie
Initialisiere vorher die ShortStrings mit #0, dann solle der Speicher auch leer sein. Hier wird es erklärt, was passiert:
http://www.delphi-forum.de/viewtopic...=224919#224919

Hallo Luckie,

danke für die schnelle Hilfe. Durch die Initialisierung der ShortStrings mit #0 sind die Überflüssigen Zeichen entfernt worden. Ich verstehe jetzt auch warum die Reste vorhanden waren. Nochmals Danke.

Gruss
Amalkotey

Luckie 3. Mär 2005 15:22

Re: Speicherung von typirisierten Dateien
 
Hat doch jascoul erklärt: Im Speicher steht eben noch Mist, da aber ein String mit #0 abgeschlosen ist, spilet es bei der Ausgabe keine Rolle.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:57 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