![]() |
Record mit array in Datei schreiben?
Hallo allerseits,
ich habe folgende Datenstruktur:
Delphi-Quellcode:
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.
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; Ich habe bereits folgendes versucht: Speichern
Delphi-Quellcode:
Laden:
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');
Delphi-Quellcode:
Nun, beim Speichern kam keine Fehlermeldung, kein gar nichts, die Datei wurde sogar geschrieben, und zwar mit folgendem Inhalt (Hex):
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)));
Code:
Vor dem Speichern war eben ein Spracheintrag mit insg. 4 Forms und wasweisich wieviel Komponenten pro Form, nach dem Laden nichts.
00 00 00 00 FF FF FF FF
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 |
Re: Record mit array in Datei schreiben?
Ich plädiere ein weiteres Mal für die
![]() 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. :) |
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.
![]() ![]() 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 |
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 |
Re: Record mit array in Datei schreiben?
Zitat:
(zum Bleistift ![]() Zitat:
|
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 |
Re: Record mit array in Datei schreiben?
Zitat:
|
Re: Record mit array in Datei schreiben?
Zitat:
Greetz alcaeus |
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: ![]() |
Re: Record mit array in Datei schreiben?
Zitat:
|
Re: Record mit array in Datei schreiben?
Zitat:
Greetz alcaeus |
Re: Record mit array in Datei schreiben?
Moin,
da die dpCollection auf streams basiert und du sie nicht in reinform speichern willst (egal ob binär oder text), würde sich eine strom-verschlüsselung anbieten. Und dafür haben wir ja Hagens RC4 verschlüsselung, die sehr schnell ist unhd tausendmal sicherer als irgendwas einfach zu negieren: ![]() Du könntest dort die TRC4Stream-klasse benutzen, welche leider hart von TMemoryStream abstammt. Wesentlich flexibler wäre hier eine RC4-dekorierer klasse. Die dekorierer-klasse würde, wie ein wrapper, um jede beliebige stream-klasse gelegt werden können. Das hatte ich damals verschlafen. Wenn interesse besteht würde ich ihn basteln, da es mich wurmt, das ich hier ein so unflexibles gebilde eingebracht habe. Konstrukte der art wären dann möglich:
Delphi-Quellcode:
egal welcher stream sich im inneren befindet, die daten laufen erstmal durch die verschlüsselung und dann in den eigentlichen stream. Damit ist man nicht mehr von irgendwelcher ableitungshierarchien abhängig und kann die funktionalitäten beliebig kombinieren :-D
var rc4DekoStream:TRC4StreamDecorator;
begin rc4DekoStream:= TRC4StreamDecorator( TFileStream.Create('c:\dat'), fmCreate) ); try myCollection.saveToStream( rc4DekoStream ); finally rc4DekoStream.free; end; end; dpCollection rules :dp: |
Re: Record mit array in Datei schreiben?
Hallo maximov,
Zitat:
Zitat:
Greetz alcaeus |
Re: Record mit array in Datei schreiben?
Zitat:
![]() Den dekorierer mach ich bei gelegenheit :wink: |
Re: Record mit array in Datei schreiben?
Zitat:
Zitat:
Greetz alcaeus |
Re: Record mit array in Datei schreiben?
[quote="alcaeus"]
Zitat:
Das DFM-streaming ist eigentlich immer abwärtskomptibel. ;) (ist einer DER Vorteile gegenüber solchen Bastelleien wie file of <type>) |
Re: Record mit array in Datei schreiben?
Jungs! Ihr habt nicht richtig zugehört :-D Der stream-dekorierer hat nix mit der dpCollection zu tun. Höchstens mit dem stream, den man zum streamen benutzt und, da ein Dekorierer nach aussen immer eine kompatible schnittstelle haben muss, braucht ihr euch keine sorgen zu machen.
|
Re: Record mit array in Datei schreiben?
Super! Ich werde dann mal alles fertigstellen, vielleicht stell ich ja das Language Support System mal hier rein...
Thema erledigt, danke an alle! :thumb: Greetz alcaeus |
Re: Record mit array in Datei schreiben?
Zitat:
![]() Nich das man denkt ich würde sachen versprechen, die ich nicht halte :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 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