Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi weitergabe und Speicherung von daten (https://www.delphipraxis.net/176715-weitergabe-und-speicherung-von-daten.html)

blinder007 22. Sep 2013 10:59

weitergabe und Speicherung von daten
 
Hallo Community,
ich will größere Informationen die Außerhalb des Programmes gelagert werden sollen und auf denen, während der Laufzeit, zuggriffen werden soll. Ich überlegte mit typisierten dateien oder mit tfilestream zu arbeiten. Nun sagte mir ein befreundeter Programmierer, es gäbe probleme bei der weitergabe zwischen 16-32 und 64bit rechner, auf grund verschiedener Datentypen. Er riet mir die Informationen in Textdateien zu speichern. Da aber der Anwender nicht auf diese Informationen zu greifen darf halte ich diese für unpraktisch, da Textdateien leicht geändert werden können. Ini-Dateien bieten mir auch nicht die nötige Sicherheit. habt ihr einen rat? Ich könnte natürlich auch eine Unit schreiben, in der ich diese informationen alle direkt speichere, das würde das Programm aber nur unnötig groß machen.
grüße
blinder007

Der schöne Günther 22. Sep 2013 12:15

AW: weitergabe und Speicherung von daten
 
"Informationen" ist aber sehr allgemein. Über welche Mengen an Daten reden wir? Muss darauf performant zugegriffen werden können?

Was ist "Anwender darf nicht darauf zugreifen"? Möchtest du dem Endnutzer deine gespeicherten Daten nicht direkt unter die Nase reiben oder muss es verschlüsselt oder zumindest obfuskiert vor ihm verborgen werden?

In Sachen "typisierte Daten" bzw. "File of XYZ": Neulich hatten wir eine interessante Diskussion darüber. Wenn du die Zeit hast kannst du ja mal lesen: http://www.delphipraxis.net/175696-d...-benutzen.html

Da geht es auch um die Technik, also auch die größer/kleiner werdenden Datentypen und Records und undurchsichtige Dateiformate die in fünf oder zehn Jahren keiner mehr versteht.


Lange Rede, kurzer Sinn: Ich bin entweder zu dumm, oder habe zu wenig Infos, um zu wissen was du genau möchtest. Wenn du sagst, dass du die Daten auch im Quelltext ablegen könntest: Dann sind es statische Daten und ändern sich nie? Beispielsweise Lookup-Tables? Wenn wir hier nicht über dutzende Megabytes reden- Warum nicht?

Ansonsten hätte ich spontan eine lokale Datenbank wie SQLite oder einfache XML-Files genommen. Aber vielleicht willst du ja auch etwas ganz anderes machen...

blinder007 22. Sep 2013 12:30

AW: weitergabe und Speicherung von daten
 
ich werde mir den thread einmal durchlesen, kingt interessant.
ich versuche dich mal mit weiteren Informationen zu versorgen:
a) es handelt sich dabei um die Datenstruktur eines (oder dann natürlicher vielen, geplant sind ca. 30) records mit ca. 10-15 daten vom typ integer und extended.
b) Es ist möglich, aber unwahrscheinlich, dass die Daten verändert werden müssen, ab einem bestimmten Punkt müssen sie einmal in das Programm geladen werden und an einem anderen Punkt wieder gelöscht / freigegeben werden.
c) es reicht eigentlich das "bloße "nicht unter die nase reiben", - sprich mit der kenntnis über die datenstruktur und dem öffnen einer Datei im editor soll man nicht an der Datenstruktur rumfummeln können (was bei Ini oder txt ja gegeben wäre)
Frage: Ich will mir das arbeiten mit Datenbanken ersparen, habe da schlechte Erfahrungen, deswegen: würde für dateien die in xml erstellt wurden Punkt c zu treffen oder nicht?

Falls es immer noch unklarheiten gibt, bitte Fragen, ich programmiere noch nicht lange, weiß also noch nicht genau welche Informationen relevant sind :)
grüße
Blinder007

jfheins 22. Sep 2013 12:53

AW: weitergabe und Speicherung von daten
 
Zitat:

Zitat von blinder007 (Beitrag 1229460)
Würde für dateien die in xml erstellt wurden Punkt c zu treffen oder nicht?

Nein. XML Dateien sind entwickelt worden, um das Datenschema (also was wo steht) explizit mit den Daten zusammen zu speichern.
Einstellungen sehen dann z.B. so aus:
Code:
<?xml version="1.0" encoding="utf-8"?>
<Param xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Kappa>6.7e-6</Kappa>
  <b1>0.1</b1>
  <b2>0.6</b2>
  <Lambda>33.63</Lambda>
  <Epsilon>0.25</Epsilon>
  <Hm>2.75e5</Hm>
  <w0>13.186e-6</w0>
</Param>
Du siehst, man kann da relativ einfach dran herum fummeln. Abhilfe wäre z.B. die Datei nicht "*.xml" zu nennen, sondern eine eigene Endung oder "*.dat". Und vielleicht im Appdata-Ordner speichern, da verirren sich nicht so viele Benutzer hin.

Mit ein Grund für XML ist ja, dass die Daten wichtiger als das Programm sind. Man hatte häufiger mal "uralte Daten, aber verflucht das Programm läuft nicht mehr. Wir brauchen aber die Daten!!!" ;-)

blinder007 22. Sep 2013 13:00

AW: weitergabe und Speicherung von daten
 
das klingt interessant, sprich ich speichere meine dateien als xml-files... werde ich mal drüber nachdenken und schauen was hier mit meiner delphi 6 so geht. beim lesen des oben geposteten threads überlegte ich jetzt doch tfilestream zu verwenden, aber da treten dann doch wohl einige Fehler auf.
Was mich dann noch interessieren würde: angenommen ich speichere die records oder klassen in einer xml-file. wie kann ich diese, in der Laufzeit, renamen und delphi zeigen, um welches format es sich handelt, um dann entsprechend damit umzugehen?
Sprich: ich ändere den Dateitypen in .eem (fiktives dateiformat, der user soll es einfach nicht erkennen können), wie kann delphi das als xml-file identifizieren?

Furtbichler 22. Sep 2013 13:05

AW: weitergabe und Speicherung von daten
 
Eine Datei umzubenennen, damit die Inhalte nicht verändert werden, ist in etwa so schlau, wie das Schild, auf dem 'Bank' steht, mit einem selbstgeschriebenen Zettel 'keine' zu versehen.

So gut wie jeder wird die Datei nehmen, und mal mit Notepad öffnen. Ich mache das jedenfalls mit jeder mir unbekannten Datei (bzw. Notepad++).

Wie wäre es mit einer einfachen Datenbank, z.B. Firebird? Das zu verändern, dürfte nur mit FB selbst möglich sein und wenn man den Zugriff mit einem Kennwort sichert, wird es noch schwieriger. Unmöglich ist gar nichts, und insofern ist das auch keine perfekte Lösung.

Eine Frage: Darf der Anwender die Dateien nicht verändern, oder willst Du nur mitbekommen, *wenn* er sie verändert hat?

Der schöne Günther 22. Sep 2013 13:13

AW: weitergabe und Speicherung von daten
 
Der XML-Inhalt ist im Endeffekt ein langer String. Du kannst die Datei ganz normal mit z.B. einem
Delphi-Quellcode:
TFileStream
öffnen und auslesen. Für Delphi gibt es mehrere XML-Libriaries. Ich benutze XML exzessiv für Speicherung von Konfigurationen und Interprozess-Kommunikation und bin mit dem normalen MS-XML (Klassen IXMLDocument, IXMLNode usw. aus den Units XmlIntf, XmlDoc, ...) eigentlich immer sehr gut gefahren. Ich habe gerade kein Delphi offen, aber die Klasse IXMLDocument hat mein ich bereits eine Methode
Delphi-Quellcode:
LoadFromFile
, da hast du es dann direkt drin, die Dateiendung ist dabei ziemlich egal.

Ob Delphi 6 MSXML schon kennt weiß ich nicht. Vielleicht solltest du die Info in dein Profil eintragen, so sieht man immer, mit welcher Version derjenige unterwegs ist.


@Furtbichler: Die Metapher sehe ich genauso. Nur bei der Häufigkeit, wie oft jemand anfängt in Dateien von Programmen zu wühlen nicht. Wir wissen nicht, was das genau für eine Software ist. Werden damit Waren hergestellt wird früher oder später jemand darin wühlen. Ist es ein Freeware oder in-house Tool für irgendeine Verwaltung oder Visualisierung, dann sicher weniger.
Ich frage mich halt wirklich, ob es denn schlimm ist, wenn jemand das verändert. Wenn er sich damit etwas zerschießt weiß er, dass er selber schuld ist.

Blöd wird die Sache erst, wenn der Kunde dann anruft "Hey, euer Kram funktioniert auf einmal nicht mehr!" obwohl er ihn selbst kaputt gemacht hat. So etwas gibt zu Genüge.


Zitat:

Eine Frage: Darf der Anwender die Dateien nicht verändern, oder willst Du nur mitbekommen, *wenn* er sie verändert hat?
Gute Idee!

blinder007 22. Sep 2013 13:25

AW: weitergabe und Speicherung von daten
 
ok, dann hier weitere informationen :)
es handelt es sich um ein, zunächst freeware, später auch shareware, spiel.

In meinem Spiel gibt es auf einer Karte unterschiedliche Städte. Ich will zwei Dateien haben.
Datei 1: enthält die größe der Stadt, die Anzahl der Objekte und Zahlen die diese Objekte identifizierbar machen. in der zweiten datei finden sich dann die ganzen identifizierer, denen dann weitere eigenschaften zugeordnet werden können.

Der User soll nicht in der Lage sein zu erkennen, was sich wo verbirgt oder welche Eigenschaften es hat. gelegentlich soll ein Objekt in einer Stadt zerstört werden, dafür muss aber nicht zwangsläufig der Wert gelöscht werden.
Ist das Prinzip klar?

Furtbichler 22. Sep 2013 13:30

AW: weitergabe und Speicherung von daten
 
Dann bleibt nur noch Verschlüsseln. Aber das ist auch Bockmist, weil man das mit Reverseengineering knacken kann.

BUG 22. Sep 2013 13:33

AW: weitergabe und Speicherung von daten
 
Zitat:

Zitat von blinder007 (Beitrag 1229474)
es handelt es sich um ein, zunächst freeware, später auch shareware, spiel.

Spieler sind natürlich etwas versierter, denen könnte man auch zutrauen, einen SQLite-Editor oder einen Hex-Editor zu benutzen.
Solange das ein Singleplayerspiel ist, ist das imho aber nicht so tragisch.

An deiner Stelle würde ich mir SQLite auf jeden Fall mal anschauen; eventuell kannst du einige Sachen, die du mit den Daten vorhast, sogar in SQL erschlagen.
Zitat:

Zitat von blinder007 (Beitrag 1229474)
Datei 1: enthält die größe der Stadt, die Anzahl der Objekte und Zahlen die diese Objekte identifizierbar machen. in der zweiten datei finden sich dann die ganzen identifizierer, denen dann weitere eigenschaften zugeordnet werden können.

Das riecht doch schon ein bisschen nach relationaler Datenbank :wink:

Zitat:

Zitat von jfheins (Beitrag 1229465)
Mit ein Grund für XML ist ja, dass die Daten wichtiger als das Programm sind. Man hatte häufiger mal "uralte Daten, aber verflucht das Programm läuft nicht mehr. Wir brauchen aber die Daten!!!" ;-)

Das ist ein wichtiger Punkt. Wenn dein Programm die Daten nur ließt, kannst du die Daten in einem beliebig bekloppten Format ausliefern, solange du die Daten in einem gut dokumentierten Format bei dir gespeichert hast.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:02 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