Was ist die beste Methode zum Speichern von Daten?

  • Allgemein

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    @programmer71

    Passwörter verschlüsselt in eine Textdatei schreiben macht sehr wenig Sinn. youtube.com/watch?v=In76HrcTHQI (Weiter hinten im Video)
    Bei simplen Daten mit System.IO, ok. Aber sobald es mehr als ein Name und eine Adresse sind unbedingt eine Datenbank, oder ähnliche Datenverwaltung.
    Siehe dazu ErfinderDesRades' Tutorials hier im Forum.
    @LaMiy
    Gut in Ordnung bei Datenbanken.
    Wenn du ein Passwort mit einem MD5 Hash verschlüsselst, wo willst du es abspeichern?
    In den Settings vom My-Namespace?!
    Selbst wenn die Datei ausgelesen wird, dann kann das Passwort so ohne Weiteres nicht entschlüsselt werden.
    Da gibt es ja nicht so viele Möglichkeiten das irgendwo hinzuspeichern.
    In eine Datenbank vielleicht noch.
    @nafets3646: Nicht unbedingt. Wenn das Programm immer eine Art Salt vor das Passwort setzt, was gespeichert werden soll, kann die Passwort-Datei nicht mehr ganz so leicht ersetzt werden, außer der "Angreifer" generiert sich eine neue, eigene, valide Passwort-Datei.
    Aber wir sollten jetzt erstmal die Antwort des TE abwarten, was er überhaupt abspeichern will, bevor wir hier noch länger rum spekulieren ;)
    Was allgemein Daten angeht würde ich meistens den einfach XmlSerializer empfehlen, da dort auch Daten leichter per Hand bearbeitet werden können, und der interne Aufwand dafür recht gering ist.
    @Ravler: Ini-Dateien sind der letzte Müll. Sowas sollte aus Protest schon nicht genutzt werden.

    Entweder wie @programmer71: schon sagte mit einer Datenbank oder einer Json-Datei.
    Der Vorteil bei Json ist, das man wie Xml recht einfach editieren kann und einige Funktionen, die Xml nicht bietet, nutzen kann.
    Wenn du nun einen solchen Aufbau hast:

    Quellcode

    1. == Aufgabe ==
    2. | Datum |
    3. | Uhrzeit |
    4. | Aufgabe |
    5. | Erinnern |
    6. =============

    Kann das einfach in Json serialisiert werden. Beispiel:

    VB.NET-Quellcode

    1. <DataContract()> _
    2. Public Class Car
    3. <DataMember()> _
    4. Public Property Name As String
    5. <DataMember()> _
    6. Public Property Type As CarType
    7. End Class
    8. Public Enum CarType
    9. Cabriolet
    10. Normal
    11. Van
    12. OldTimer
    13. End Enum

    Das wird dann via

    VB.NET-Quellcode

    1. Dim list As New List(Of Car)
    2. Using fS As New FileStream("Cars.json", FileMode.OpenOrCreate, FileAccess.Write)
    3. Dim serializer As New DataContractJsonSerializer(typeof(Car))
    4. serializer.WriteObject(fS, list)
    5. End Using

    serialisiert.
    Entsprechend kann das natürlich auch deserialisiert werden.

    VB.NET-Quellcode

    1. Dim list As New List(Of Car)
    2. Using fS As New FileStream("Cars.json", FileMode.OpenOrCreate, FileAccess.Write)
    3. Dim serializer As New DataContractJsonSerializer(typeof(Car))
    4. list = CType(serializer.ReadObject(fS), List(Of Car))
    5. End Using

    Der Vorteil hierbei ist, dass weniger Overhead erzeugt wird.
    Eine Beispielsausgabe (aus meinem aktuellen Spiel) sieht dann in etwa so aus:
    Lang
    {"Entries":[{"Key":"Title","Value":"UmFuZG9tIEFkdmVudHVyZQ=="},{"Key":"Author.JM","Value":""},{"Key":"Author.FB","Value":""},{"Key":"Game.Play","Value":"UGxheQ=="},{"Key":"Game.Settings","Value":"U2V0dGluZ3M="},{"Key":"Game.Exit","Value":"RXhpdA=="},{"Key":"Yes","Value":"WWVz"},{"Key":"No","Value":"Tm8="},{"Key":"Fullscreen","Value":"RnVsbHNjcmVlbg=="},{"Key":"Game.Credits","Value":"Q3JlZGl0cw=="},{"Key":"Credits.Title","Value":"XlRpdGxlJCB8IENyZWRpdHM="},{"Key":"Credits.SubTitle","Value":"Q29weXJpZ2h0IDIwMTMgYnkgRmlicmUgTmV0d29yaw=="},{"Key":"Credits.Introduction","Value":"VGhpcyBzb2Z0d2FyZSBoYXMgYmVlbiBtYWRlIHdpdGggWE5BIDQuMC4gSW50ZW50aW9uIHRvIGNyZWF0ZSB0aGlzIHNvZnR3YXJlIGlzIHRvIGdhaW4gbW9uZXkgZm9yIHN0dWR5aW5nIGFzIHdlbGwgYXMgZGV2ZWxvcG1lbnQgdG9vbHMgYW5kIGxlYXJuaW5nIGZvciBnYW1lIGRldmVsb3BtZW50Lg0KWW91IG1heSBub3RpY2UgdGhhdCB0aGluZ3MgYXJlIG5vdCBmaW5pc2hlZCBvciBtaXNzaW5nLiBUZWxsIHVzIG9uIERlc3VyYSB3aGF0IHlvdSB3YW50IHRvIGhhdmUgaW4gdGhpcyBnYW1lLiBPdGhlcndpc2UgdGhpcyB3b24ndCBiZSB3aGF0IHlvdSB3YW50IGl0IHRvIGJlLg0KV2UgaG9wZSB5b3UgZW5qb3kgdGhlIGdhbWUgYXMgbXVjaCBhcyB3ZSBoYXZlIHdyaXRpbmcgaXQu"},{"Key":"Credits.Team","Value":"SWRlYSwgU3RvcnksIExldmVsZGVzaWduOiBeQXV0aG9yLkpNJCwgXkF1dGhvci5GQiQNClByb2dyYW1taW5nOiBeQXV0aG9yLkpNJA0KVGV4dHVyZXM6IF5BdXRob3IuRkIk"},{"Key":"Credits.Music","Value":"TXVzaWM6DQpLZXZpbiBNYWNMZW9kIC0gVGhpbmdzPw=="}],"Locale":"en-US","Name":"Main"}

    Die Werte sind hier in Base64 kodiert, damit keine Probleme bei der Dateitransaktion entstehen.
    Die Datei ist etwa 1.37 KiB groß, eine entsprechende Datenbank (SqlCe) min. 128 KiB. Xml entsprechend etwa 8 KiB. Binärserialisiert wäre noch eine andere Sache, die du in Betracht ziehen kannst, allerdings kann die dann niemand lesen. Ist aber auch nicht kleiner als die Json Datei.
    @programmer71

    Du verstehst es nicht. Bitte keine 'schlechten' YouTube Videos. YouTube Tutorials an sich sind nur Videos, auch jemand der Ahnung von dem hat was er tut kann ein Video erstellen, das ein Vorgang beschreibt.

    Richtet euch nicht immer an die anderen, bildet euch mal selber eine Meinung und plappert nicht jeden foo nach.
    Das einzige was du hier tust ist die Meinung verschiedener User hier im Board zu vertreten. Du selbst hast wahrscheinlich selbst nicht viel Ahnung, was auch nicht schlimm ist und sich am Anfang nach denen zu richten ist eventuell sogar gut, jedoch sowas wie aber nur die Videos von 'SpaceyX' der außerhalb dieses Forums ein unbeschriebenes Blatt ist, zeigt halt das du mein Text nicht interpretieren kannst und nein das soll nicht beleidigend gegenüber dem User 'SpaceyX' sein.

    Zum Topic:

    Ich hab mir vor kurzem für Json eine Klasse geschrieben, die mir erlaubt die Klasse generisch lokal abzuspeichern und sie zuverwenden.

    Spoiler anzeigen

    Quellcode

    1. public class ConfigHandler
    2. {
    3. public static string ConfigPath
    4. {
    5. get { return Path.Combine(Environment.CurrentDirectory, "Config.json"); }
    6. }
    7. public static void SaveConfig<T>(object input)
    8. {
    9. var jsonSerializer = new DataContractJsonSerializer(typeof (T));
    10. using (var ms = new MemoryStream())
    11. {
    12. jsonSerializer.WriteObject(ms, input);
    13. ms.Position = 0;
    14. using (var reader = new StreamReader(ms))
    15. {
    16. using (var writer = new StreamWriter(ConfigPath))
    17. {
    18. writer.Write(reader.ReadToEnd());
    19. }
    20. }
    21. }
    22. }
    23. public static T LoadConfig<T>()
    24. {
    25. if (!File.Exists(ConfigPath))
    26. {
    27. return default(T);
    28. }
    29. var jsonSerializer = new DataContractJsonSerializer(typeof (T));
    30. using (var reader = new StreamReader(ConfigPath))
    31. {
    32. using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(reader.ReadToEnd())))
    33. {
    34. return (T) jsonSerializer.ReadObject(ms);
    35. }
    36. }
    37. }
    38. }


    vielleicht kannst du damit was anfangen, ist leider in C# aber es gibt ja genügen online converter. sinnvoll wäre es natürlich noch wenn du den configpath per konstruktor setzt. (ich brauchte es jedoch nicht)
    @AliveDevil:

    Hallo,

    ich glaube JSON ist genau die Sache, die ich brauche.
    Ich brauche ja auch eine List(Of Aufgabe) und die kann
    man ja genau so einfach deserialisieren.

    Ich werde das dann mit JSON versuchen und
    wenns funktioniert, markiere ich es als Erledigt,
    ansonsten poste ich mein Problem.

    Danke.

    MFG

    Alex-Digital :D
    Nein, ist es nicht.
    Json kann keine relationalen Zusammenhänge persistieren, wie sie bei einem Aufgabenplaner mit höchster Wahrscheinlichkeit iwo auftreten.

    Aber deine Eingangs-Frage käst mich an:
    was ist die beste Methode, Daten zu speichern?
    Warum ist das bei so vielen Leuts nicht möglich, dass sie konkret fragen?
    Bei sonem Abstrakt-Gebläse braucht man erstmal zig Posts, um rauszukriegen, worums wirklich geht - warum kann man das nicht gleich sagen?

    zurück @Topic: in diesem Falle ist eindeutig DB-Programmierung ohne Datenbank die günstigste Vorgehensweise: Das kann relationale Zusammenhänge modellieren, und erspart einem trotzdem das Theater mit richtigen Datenbanken.