Autor Beitrag
tomo2403
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 46

Win10
C#, VS 2019
BeitragVerfasst: Sa 10.03.18 21:34 
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]

Vielen Dank im Voraus!

Moderiert von user profile iconTh69: URL-Titel hinzugefügt.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden 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
Und du kannst natürlich auch gerne nachfragen. ;-)

Moderiert von user profile iconTh69: URL-Titel hinzugefügt.
tomo2403 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 46

Win10
C#, VS 2019
BeitragVerfasst: So 11.03.18 13:09 
OK. :)
Also, Ich habe eine Klasse zur Speicherung erstellt:
ausblenden volle Höhe 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:
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 11.03.18 13:41 
Hallo,

schau mal mit einem (Hex-)Editor in die abgespeicherte Textdatei.
Bei deinem Code
ausblenden 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
ausblenden 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:
ausblenden 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).

Für diesen Beitrag haben gedankt: tomo2403
tomo2403 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 46

Win10
C#, VS 2019
BeitragVerfasst: So 11.03.18 14:58 
:zustimm: Es Funktioniert Endlich
Danke, das ich da nicht selber drauf gekommen bin.