Delphi 4 Dateiinterne Dateien? < Pascal < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Ich hab ein Problem bei Delphi 4 (Delphi 3 geht auch, ist ja fast dasselbe):
In meinem Programm hab ich ein TStringGrid verwendet, in das man als
Benutzer Daten eintragen kann. Diese Daten will ich speichern und beim
nächsten mal auch wieder ins Programm laden können.
Jetzt weiß ich zwar, dass man das ganze z.B. in eine Textdatei (oder
ein anderer Dateityp) schreiben könnte, die dann eingelesen wird. Aber
mir wäre es lieber, wenn man keine zusätzliche Datei braucht, in der
die Daten stehen, denn sonst könnte man durch Veränderung dieser Datei auch den Tabelleninhalt verändern. Ich will also, dass die Daten in der Tabelle irgendwie so im Programm drin stecken, dass niemand da ran kommt (es sei denn, er benutzt das Programm).
Jetzt hat mir ein Klassenkamerad erzählt, dass es wohl möglich wäre,
Dateien in das Programm "einzuschleusen", also dass es zwar richtige
Dateien sind, diese aber nicht als extra Dateien abgelegt werden, die
man dann im Windows-Explorer sehen könnte, sondern im Programm stecken. (Wie das geht, wusste er aber nicht.)
Stimmt das? Wenn ja, wie kann ich solche Dateien erzeugen und in mein
Programm eischleusen?
Gibt es noch andere Möglichkeiten, den Tabelleninhalt ausschließlich IM Programm festzuhalten?
//Schlagt mir aber bitte nicht vor, einen eigenen Dateityp zu erstellen,
denn dann würde wieder eine Datei erzeugt werden, die man manuell
verändern kann (auch wenn sie nicht txt heißt), denn der Editor in
Windows öffnet ja auch unbekannte Dateien.
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 16:20 Di 28.09.2004 | Autor: | Lizard |
Also, ich glaube du machst dir deswegen etwas zu viel Gedanken. Nüchtern betrachtet lässt sich jede Datei auf dem Computer verändern, ob sie nun MeinProgramm.exe heißt oder DatenTabelle.txt. Wenn du also Wert darauf legst, deine Daten absolut unveränderlich zu halten, musst du sie schon in Stein meisseln (oder auf CD-ROM ausliefern oder dergleichen).
Banaler Unterschied bei den beiden obigen Dateien wäre jetzt, daß sich die eine standardmäßig selber öffnet, die andere dagegen vom Windows Editor. Wenn du das verhindern willst, reicht es, den Dateitypen zu ändern, meinetwegen auf DatenTabelle.dll oder dergleichen. Ist zwar nicht dafür gedacht, sollte aber keinen größeren Schaden verursachen.
Hübscher ist natürlich eine andere Lösung: Was du eigentlich anstrebst, scheint mir eher eine Konsistenz der Daten zu sein, also daß das Programm auf "magische" Art und Weise merkt, wenn sich die Daten von einer Sitzung zur nächsten verändert haben. Das dürfte wohl auch eher die starke Integration sein, nach der du da fragst, und die es meines Wissens nach in dieser Form überhaupt nicht gibt: eine normale .exe Datei wird während der Ausführung niemals verändert, und ist dafür auch gar nicht vorgesehen (irrelevante Sonderfälle mal ausgenommen).
Eine solche Konsistenz erreicht man normalerweise über Prüfsummen: Dabei wird ein Algorithmus eingesetzt, der sich bestimmte Eigenschaften deiner Daten anschaut und daraus eine kurze Zeichenkette berechnet, die du ebenfalls irgendwo speichern solltest (z.B. in der Registry, da ist sie erstmal überhaupt nicht offensichtlich). Beim nächsten Programmstart liest du dann die Tabelle wieder ein und berechnest erneut die Prüfsumme, worauf du diese mit der gespeicherten vergleichst. Wenn sie nicht übereinstimmen, weißt du schon einmal, daß deine Daten verändert wurden, und kannst entsprechend darauf reagieren. 100% Sicherheit bietet auch das nicht, aber die Chance, daß irgendeine Person 'zufällig' den Prüfsummenalgorithmus errät und sich die Mühe macht, Änderungen der Datei in der Registrierung mitzuprotokollieren, ist glücklicherweise recht gering (und wie gesagt, 100% erreicht man sowieso nie).
Hoffe, der Ansatz hilft zunächst mal weiter... ansonsten schreib ruhig mal, was du eigentlich erreichen möchtest (d.h. was dein Programm tut und warum es so wichtig ist, daß die Daten sich nicht ändern), vielleicht existiert ja noch eine andere Lösung für das Problem.
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 23:33 Di 28.09.2004 | Autor: | error |
hi,
ich würde einfach die daten, die eingegeben wurden, vor dem speichern in eine datei, "verschlüsseln". muss ja kein doller kryptographisch anspruchsvoller algorithmus sein, sondern du kannst einfach jedes "a" durch ein "c", jedes "b" durch ein "p", usw. ersetzen. und in deiner programm.exe steht dann die entsprechende aufschlüsselungstabelle um die daten im programm anzeigen zu können.
dann kann ein möglicher datei-leser/-veränderer nämlich nix mehr mit der datei anfangen (außer sie zu zu zerstören). zusätzlich kannst du ja das mit der checksumme von meinem vorredner machen, damit du weisst ob die datei verändert wurde.
natürlich könnte auch ein besonders hartnäckiger spion so einen code knacken, aber 100%ige sicherheit gibt es ja nie.
bis dann, error
|
|
|
|