![]() |
Inhalt eines Memos binär speichern?
Hallo,
Ich habe eine Frage bezüglich: Dateien binbär speichern. Die binäre Datei soll dann nicht einfach von jedem Editor gelesen werden können wie zb Notepad. Um einzelne Strings zu speichern und zu lesen habe ich bereits Code gefunden. (Speichern:
Delphi-Quellcode:
Lesen:
var
FileHandle : Integer; Version : Integer; Period : Integer; Digit : Integer; c_copyright : String; Symbol : String; begin Version := 400; Period := 1; Digit := 6; c_copyright := '(C)opyright 2003, MetaQuotes Software Corp.'; Symbol := 'EURUSD'; FileHandle := FileCreate(Path); FileWrite(FileHandle, Version, SizeOf(Version)); FileWrite(FileHandle, c_copyright, SizeOf(c_copyright)); FileWrite(FileHandle, Symbol, SizeOf(Symbol)); FileWrite(FileHandle, Period, SizeOf(Period)); FileWrite(FileHandle, Digit, SizeOf(Digit)); FileClose(FileHandle); end;
Delphi-Quellcode:
)
var
FileHandle : Integer; Version : Integer; Period : Integer; Digit : Integer; c_copyright : String; Symbol : String; begin FileHandle := FileOpen(Path, fmOpenRead); FileRead(FileHandle, Version, SizeOf(Version)); FileRead(FileHandle, c_copyright, SizeOf(c_copyright)); FileRead(FileHandle, Symbol, SizeOf(Symbol)); FileRead(FileHandle, Period, SizeOf(Period)); FileRead(FileHandle, Digit, SizeOf(Digit)); FileClose(FileHandle); end; Aber wie sieht es aus wenn ich eine StringList habe, deren Länge sich ändern kann? |
Re: Inhalt eines Memos binär speichern?
dann musst Du eben als erstes die Länge der StringList in die Datei schreiben
mr2 |
Re: Inhalt eines Memos binär speichern?
:?: Eine String List enthält Strings - wenn Du diese speicherst, wird jeder diese Datei mit Notpad öffnen können.
Auch die Datei aus deinem Beispiel lässt sich mit einem Editor öffnen, nur sind die ersten Zeichen eben binär. Der Text erscheint nach wie vor im Klartext. /thomas |
Re: Inhalt eines Memos binär speichern?
Moin, Moin.
Die Frage ist m.E. unglücklich formuliert; was bedeutet "binär speichern" - alles wird doch letztlich binär gespeichert. Du möchtest den Text aber offenbar verschleiern oder verschlüsseln. Da gibt es verschiedene Möglichkeiten; die Suche hier im Forum wird einiges dazu anzeigen. Zunächst wäre die Frage zu klären, ob es lediglich darum geht, das Öffnen mit einem beliebigen Editor zu verhindern bzw. dort nur unleserliches anzuzeigen. Wenn also eine Verschleierung genügt, ist eine OR-Verknüpfung der einzelnen Zeichen bereits ausreichend. Soll es eine ernsthafte Verschlüsselung sein, wird es dann schon aufwendiger. |
Re: Inhalt eines Memos binär speichern?
Ja ich meine das Verschlüsseln von Strings.
Und zu dem Quellcode: da muss statt einem Char Array String hin. Ich berichtige es wenns geht. @ mr2 Das habe ich probiert aber beim Lesen der Datei gibt es dann einen Fehler. |
Re: Inhalt eines Memos binär speichern?
Die Länge eines Strings ermittelst Du mit Length und nicht SizeOf.
SizeOf liefert bei einem String eine 4 - das ist die Länge des Zeigers auf den Speicherbereich in dem sich der String befindet. Das Schreiben der Länge müsste in etwa so aussehen_
Delphi-Quellcode:
Beim Lesen muss Du erstmal die Länge auslesen und dann den String mit dieser Länge lesen:
(...)
c_copyright : String; Symbol : String; Laenge : Integer // <------------- Eine Variable für die Länge des Strings begin Version := 400; Period := 1; Digit := 6; c_copyright := '(C)opyright 2003, MetaQuotes Software Corp.'; Symbol := 'EURUSD'; FileHandle := FileCreate(Path); Laenge := Length(c_copyright); // <------------- Länge des Strings ermitteln FileWrite(FileHandle, Laenge, SizeOf(Laenge)); // <--------------- Länge des Strings speichern FileWrite(FileHandle, c_copyright, SizeOf(c_copyright)); // <----- Jetzt kommt der String ... (...)
Delphi-Quellcode:
Ungetestet, aber so in etwa müsste das funktionieren.
(...)
FileRead(FileHandle, c_copyright, Laenge); (...) /Thomas |
Re: Inhalt eines Memos binär speichern?
Danke soweit funktioniert es.
Aber wenn ich jetzt den Inhalt eines Edits speichere und nach einem Neustart des Programms lade kommt ein Fehler: Access violation at adress 7C91ED9E in module 'ntdll.dll'. Read of address 00BBFFFF Ich habe keine Ahnung was dieser Fehler zu bedeuten hat. Mein Code:
Delphi-Quellcode:
// ... uses usw. ... var Form1: TForm1; Path : string = 'test.rmn'; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var FileHandle: Integer; Text: String; Laenge: Integer; // <------------- Eine Variable für die Länge des Strings begin Text := Edit1.Text; FileHandle := FileCreate(Path); Laenge := Length(Text); // <------------- Länge des Strings ermitteln FileWrite(FileHandle, Laenge, SizeOf(Laenge)); // <--------------- Länge des Strings speichern FileWrite(FileHandle, Text, SizeOf(Text)); FileClose(FileHandle); end; procedure TForm1.Button2Click(Sender: TObject); var FileHandle : Integer; Text : String; Laenge : Integer; begin FileHandle := FileOpen(Path, fmOpenRead); FileRead(FileHandle, Laenge, SizeOf(Laenge)); FileRead(FileHandle, Text, Laenge); FileClose(FileHandle); ShowMessage(Text); end; end. |
Re: Inhalt eines Memos binär speichern?
Zitat:
Zitat:
|
Re: Inhalt eines Memos binär speichern?
erstmal, wenn du in Text war reinladen willst, dann mußt die den Speicher zum Reinladen erstmal reservieren.
und Text zeigt nicht auf die Stringdaten, sindern auf den Stringzeiger
Delphi-Quellcode:
Laenge := Length(Text);
FileWrite(FileHandle, Laenge, SizeOf(Laenge)); FileWrite(FileHandle, Text[1], Leange); // und die länge muß auch stimmen FileRead(FileHandle, Laenge, SizeOf(Laenge)); SetLength(Text, Laenge); FileRead(FileHandle, Text[1], Laenge); falls Text mal leer sein kann, mußt du das auch noch absichern, da Text[1] sonst eine Exception wirft, wenn du auf der erste, nicht vorhandene Zeichen zugreifen willst.
Delphi-Quellcode:
Laenge := Length(Text);
FileWrite(FileHandle, Laenge, SizeOf(Laenge)); If Laenge > 0 Then FileWrite(FileHandle, Text[1], Leange); FileRead(FileHandle, Laenge, SizeOf(Laenge)); SetLength(Text, Laenge); If Laenge > 0 Then FileRead(FileHandle, Text[1], Laenge); |
Re: Inhalt eines Memos binär speichern?
Aber dann wird es bei mir nicht verschlüsselt angezeigt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 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 by Thomas Breitkreuz