Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Record mit array in Datei schreiben? (https://www.delphipraxis.net/39517-record-mit-array-datei-schreiben.html)

alcaeus 3. Feb 2005 19:40


Record mit array in Datei schreiben?
 
Hallo allerseits,

ich habe folgende Datenstruktur:

Delphi-Quellcode:
type
  TComponentEntry = record
    sComponentName: String;
    cCaption: TCaption;
    cHint: TCaption;
  end; //type TComponentEntry = record

  TFormEntry = record
    sFormName: String;
    cCaption: TCaption;
    ComponentEntries: array of TComponentEntry;
  end; //type TFormEntry = record

  TLanguageEntry = record
    sLanguageName: String;
    FormEntries: array of TFormEntry;
  end; //type TLanguageEntry = record

var
  LanguageEntries: array of TLanguageEntry;
Diese Struktur dient dazu, alle Texte fuer meine Anwendung zu speichern, so dass diese auch schnell gewechselt werden. Nun moechte ich die Texte aber nicht jedesmal neu aus der ini-Datei laden, sondern das LanguageEntries-Array direkt in eine Datei schreiben und neu auslesen.
Ich habe bereits folgendes versucht:
Speichern
Delphi-Quellcode:
var
  MS: TMemoryStream;
begin
  ShowMessage(IntToStr(Length(LanguageEntries)));
  MS := TMemoryStream.Create;
  try
    MS.Position := 0;
    MS.Write(LanguageEntries, SizeOf(LanguageEntries));
    MS.SaveToFile('C:\temp.tmp');
  finally
    MS.Free;
  end;
  ShowMessage('Saved');
Laden:
Delphi-Quellcode:
var
  MS: TMemoryStream;
begin
  MS := TMemoryStream.Create;
  try
    MS.Position := 0;
    MS.LoadFromFile('C:\temp.tmp');
    MS.Read(LanguageEntries, SizeOf(LanguageEntries));
  finally
    MS.Free;
  end;
  ShowMessage(IntToStr(Length(LanguageEntries)));
Nun, beim Speichern kam keine Fehlermeldung, kein gar nichts, die Datei wurde sogar geschrieben, und zwar mit folgendem Inhalt (Hex):
Code:
00 00 00 00 FF FF FF FF
Vor dem Speichern war eben ein Spracheintrag mit insg. 4 Forms und wasweisich wieviel Komponenten pro Form, nach dem Laden nichts.

Hat jemand eine Idee wie ich diese Struktur speichern kann? Die Texte sollten auch nicht unbedingt im Klartext drinstehn, ich haette lieber sowas wie bei einem File of <Datentyp>

Thanx and Greetz
alcaeus

Robert_G 3. Feb 2005 19:56

Re: Record mit array in Datei schreiben?
 
Ich plädiere ein weiteres Mal für die dpCollectiondpCollection.
Wenn du es nicht in Klartext speichern willst, speichere sie doch in einen Stream, den du mit irgendeiner PackLib schrumpfst. ;)
Das hätte auch den Vorteil, dass du dir deine Anwendung nicht mit diesem Array und dem Record entstellen musst. :)

Keldorn 3. Feb 2005 19:57

Re: Record mit array in Datei schreiben?
 
ich persönlich würde zum speichern streams verwenden und die Daten einzeln reinschreiben. Wenn sich der aufbau mal ändert (ist ja nie ausgeschlossen) hat man bessere Möglichkeiten, darauf zu reagieren. Es gab da schon mehrere Anregungen auch hier im Forum.

http://www.delphipraxis.net/internal...ghlight=stream
http://www.delphipraxis.net/internal...stream&start=0

sowie du das machst, wird das bei dynamsichen array und Strings nichts, da die Länge unbestimmt ist. ein sizeof auf einen String wird dir auch nur 4 zurückgeben, egal wie lang er ist.

Mfg Frank

alcaeus 3. Feb 2005 20:08

Re: Record mit array in Datei schreiben?
 
Danke, ich werd die entsprechenden Beitraege mal als PDF speichern, und es morgen auf dem Weg zur Arbeit ausprobieren.

@Robert: Koenntest du mir bitte ein kleines Beispiel/einen Link zur Sache mit der PackLib geben? Ich habe auch schon an die DP-Collection gedacht, aber bisher noch nicht drauf zurueckgegriffen, da alles im Klartext gespeichert wird.

Danke schonmal :thumb:

Greetz
alcaeus

Robert_G 3. Feb 2005 20:23

Re: Record mit array in Datei schreiben?
 
Zitat:

Zitat von alcaeus
@Robert: Koenntest du mir bitte ein kleines Beispiel/einen Link zur Sache mit der PackLib geben?

Damit meinte ich halt irgendwas, dass dir einen Stream packen, verschlüsseln, nach Sibirien verkaufen, ... kann. ;)
(zum Bleistift Hier im Forum suchenzlib, solltest du auf deiner Delphi CD finden)

Zitat:

Zitat von alcaeus
Ich habe auch schon an die DP-Collection gedacht, aber bisher noch nicht drauf zurueckgegriffen, da alles im Klartext gespeichert wird.

Setze sie auf Binary(wird dadurch etwas kleiner) und jage den Stream durch einen Zerhackstückeler deiner Wahl.

alcaeus 3. Feb 2005 20:29

Re: Record mit array in Datei schreiben?
 
Danke Robert,

wie gesagt, ich werd das morgen mal versuchen, das heisst ich werde euch am nachmittag wahrscheinlich wieder belaestigen :mrgreen:

Greetz
alcaeus

Jens Schumann 3. Feb 2005 20:38

Re: Record mit array in Datei schreiben?
 
Zitat:

Zitat von alcaeus
... Ich habe auch schon an die DP-Collection gedacht, aber bisher noch nicht drauf zurueckgegriffen, da alles im Klartext gespeichert wird.

das ist nicht richtig. TmxJsCollection hat die property Binary. Wenn Du diese Eigenschaft auf True setzt werden die Daten im binär gespeichert. Natürlich könnte man die Strings noch lesen. Die Strings wären bei der Verwendung von Streams ebenfalls lesbar.

alcaeus 3. Feb 2005 20:41

Re: Record mit array in Datei schreiben?
 
Zitat:

Zitat von Jens Schumann
Natürlich könnte man die Strings noch lesen. Die Strings wären bei der Verwendung von Streams ebenfalls lesbar.

Lesbar,nicht lesbar, der Teil ist eigentlich egal, schliesslich sieht man die Strings im Programm sowieso. :zwinker: Mir geht es mehr darum, dass man die Texte in der Datei nicht so einfach aendern kann...

Greetz
alcaeus

jfheins 3. Feb 2005 20:44

Re: Record mit array in Datei schreiben?
 
Denk' dir halt ne tolle Kodierung aus.

Du könntest z.B. jedes Byte durchgehen, und es negieren. dann kommt nur noch Buchstabensalat heraus :wink:

Oder sowas:
http://www.delphipraxis.net/internal...=256791#256791

Jens Schumann 4. Feb 2005 00:05

Re: Record mit array in Datei schreiben?
 
Zitat:

Zitat von alcaeus
Zitat:

Zitat von Jens Schumann
Natürlich könnte man die Strings noch lesen. Die Strings wären bei der Verwendung von Streams ebenfalls lesbar.

Lesbar,nicht lesbar, der Teil ist eigentlich egal, schliesslich sieht man die Strings im Programm sowieso. :zwinker: Mir geht es mehr darum, dass man die Texte in der Datei nicht so einfach aendern kann...

Greetz
alcaeus

Dann verwende doch die dpcollection mit Binary auf True.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:32 Uhr.
Seite 1 von 2  1 2      

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