AGB  ·  Datenschutz  ·  Impressum  







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

Inhalt eines Memos binär speichern?

Ein Thema von Yakumo500 · begonnen am 3. Feb 2009 · letzter Beitrag vom 8. Feb 2009
Antwort Antwort
Seite 1 von 2  1 2      
Yakumo500

Registriert seit: 15. Nov 2008
Ort: Darmstadt
106 Beiträge
 
#1

Inhalt eines Memos binär speichern?

  Alt 3. Feb 2009, 19:19
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:
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;
Lesen:
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?
  Mit Zitat antworten Zitat
mr2

Registriert seit: 3. Mai 2003
140 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: Inhalt eines Memos binär speichern?

  Alt 3. Feb 2009, 20:18
dann musst Du eben als erstes die Länge der StringList in die Datei schreiben

mr2
"... we know, there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we don't know. But there are also unknown unknowns - the ones we don't know we don't know."
  Mit Zitat antworten Zitat
tomsson74

Registriert seit: 8. Jan 2008
73 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Inhalt eines Memos binär speichern?

  Alt 3. Feb 2009, 20:26
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
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#4

Re: Inhalt eines Memos binär speichern?

  Alt 4. Feb 2009, 07:10
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.
Ralph
  Mit Zitat antworten Zitat
Yakumo500

Registriert seit: 15. Nov 2008
Ort: Darmstadt
106 Beiträge
 
#5

Re: Inhalt eines Memos binär speichern?

  Alt 4. Feb 2009, 13:36
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.
  Mit Zitat antworten Zitat
tomsson74

Registriert seit: 8. Jan 2008
73 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Inhalt eines Memos binär speichern?

  Alt 4. Feb 2009, 15:27
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:
  (...)
  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 ...
  (...)
Beim Lesen muss Du erstmal die Länge auslesen und dann den String mit dieser Länge lesen:

Delphi-Quellcode:
  (...)
  FileRead(FileHandle, c_copyright, Laenge);
  (...)
Ungetestet, aber so in etwa müsste das funktionieren.

/Thomas
  Mit Zitat antworten Zitat
Yakumo500

Registriert seit: 15. Nov 2008
Ort: Darmstadt
106 Beiträge
 
#7

Re: Inhalt eines Memos binär speichern?

  Alt 4. Feb 2009, 18:28
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Inhalt eines Memos binär speichern?

  Alt 4. Feb 2009, 18:50
Zitat:
FileWrite(FileHandle, Text, SizeOf(Text));
Zitat:
FileRead(FileHandle, Text, Laenge);
Siehst Du den Unterschied zwischen Schreiben und Lesen? Ich könnte wetten, dass SizeOf(Text) immer 4 ist.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#9

Re: Inhalt eines Memos binär speichern?

  Alt 4. Feb 2009, 19:15
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);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Yakumo500

Registriert seit: 15. Nov 2008
Ort: Darmstadt
106 Beiträge
 
#10

Re: Inhalt eines Memos binär speichern?

  Alt 4. Feb 2009, 19:31
Aber dann wird es bei mir nicht verschlüsselt angezeigt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:21 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