Entwickler-Ecke

WinForms - int in .txt Datei speichern


tomo2403 - Sa 10.03.18 21:34
Titel: int in .txt Datei speichern
Hallo Leute :wink2:

Ich habe vor kurzen erst mit programmieren angefangen und
möchte über Windows Form den Wert eines NumericUpDown in einer .txt Datei speichern.
Ich habe schon verschiedene Videos angesehen, aber die Codes die dort gezeigt werden
Funktionieren nicht. Immer wenn ich eine Zahl versuche einspeicheren wird Null eingespeichert.

Siehe YouTube: Alles Speichern - C# Tutorial [Serialisieren] [.Net] [German] [https://m.youtube.com/watch?v=hopElAtO8EM]

Vielen Dank im Voraus!

Moderiert von user profile iconTh69: URL-Titel hinzugefügt.


jaenicke - Sa 10.03.18 23:29

Hallo und :welcome: im Forum!

Am sinnvollsten wäre in so einem Fall, wenn du einfach einmal zeigst was du bisher hast und was du versucht hast. Dann können wir dir besser helfen.

Denn das Problem an diesen Videos ist, dass diese dazu verleiten, dass man nur abtippt ohne zu verstehen was da eigentlich passiert. Deshalb kommt man dann oft nicht alleine weiter.

Denn mit der Antwort alleine kommst du vermutlich auch nicht weiter:

C#-Quelltext
1:
System.IO.File.WriteAllLines(@"C:\Temp\Test.txt"new string[] {numericUpDown1.Value.ToString()});                    

Mehr dazu findest du in der Doku: File.WriteAllLines [https://msdn.microsoft.com/de-de/library/92e05ft3(v=vs.110).aspx]
Und du kannst natürlich auch gerne nachfragen. ;-)

Moderiert von user profile iconTh69: URL-Titel hinzugefügt.


tomo2403 - So 11.03.18 13:09

OK. :)
Also, Ich habe eine Klasse zur Speicherung erstellt:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
namespace Martin_Luther_Quiz
{
    [Serializable]
    public class Level_Daten
    {
        public int level { get; set; }

        public void save(string path)
        {
            System.IO.FileStream FS = new System.IO.FileStream(path, System.IO.FileMode.Create);
            BinaryFormatter BF = new BinaryFormatter();


            BF.Serialize(FS, this);
            FS.Dispose();

        }

        public Level_Daten load(string path)
        {
            Level_Daten LD = new Level_Daten();

            System.IO.FileStream FS = new System.IO.FileStream(path, System.IO.FileMode.Open);
            BinaryFormatter BF = new BinaryFormatter();
            
            LD = (Level_Daten)BF.Deserialize(FS);

            return LD;
        }
    }
}

Befehl zur Speicherung:

C#-Quelltext
1:
2:
3:
Level_Daten LD = new Level_Daten();
LD.save(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Level_Statistics.txt");
LD.level = (int)level_code_NumericUpDown.Value;

Befehl zum Laden:

C#-Quelltext
1:
2:
3:
Level_Daten LD = new Level_Daten();
LD = LD.load(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Level_Statistics.txt");
level_code_NumericUpDown.Value = LD.level;


Angenommen im level_code_NumericUpDown steht eine 2, ich ändere den wert und lade anschließen die .txt Datei wieder, steht im level_code_NumericUpDown Null.
Selbs wenn ich den Speicherort ändere Funktioniert es nicht. :nixweiss: :eyecrazy:

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


Th69 - So 11.03.18 13:41

Hallo,

schau mal mit einem (Hex-)Editor in die abgespeicherte Textdatei.
Bei deinem Code

C#-Quelltext
1:
2:
3:
Level_Daten LD = new Level_Daten();
LD.save(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Level_Statistics.txt");
LD.level = (int)level_code_NumericUpDown.Value;
passt die Reihenfolge nicht. 8)

PS: Die Zuweisung beim Laden

C#-Quelltext
1:
Level_Daten LD = new Level_Daten();                    
ist (bei deinem bisherigen Code) überflüssig, da du in der nächsten Zeile gleich wieder neu zuweist.

Denn deine Methode load sollte auch nicht ein neues Level_Daten-Objekt zurückliefern, sondern so wie save direkt mit der Objektinstanz arbeiten:

C#-Quelltext
1:
public void load(string path)                    
(denn sonst sollte diese Methode static sein, da du ja extra eine Instanz anlegen mußt, um dann wiederum eine andere Instanz zu erzeugen).

Noch ein PPS: Eine Binärdatei solltest du nicht unbedingt als ".txt" abspeichern, da dies doch verwirrend sein kann... (oder aber du benutzt die XmlSerializer-Klasse: Mit XmlSerializer Objekte als XML speichern und laden [https://www.entwickler-ecke.de/viewtopic.php?t=64947]).


tomo2403 - So 11.03.18 14:58

:zustimm: Es Funktioniert Endlich
Danke, das ich da nicht selber drauf gekommen bin.