C# .txt ausleseproblem

16Antworten
  1. #1
    Avatar von telecaster95
    telecaster95 ist offline
    Themen Starter

    Title
    Benutzer
    seit
    11.04.2011
    Ort
    /home/tele
    Beiträge
    1.617

    Standard C# .txt ausleseproblem

    Hallo,
    Ich arbeite grade mit C# an einem Programm(die spätere Funktion zu erklären würde den Rahmen sprengen) wo ich in einer Form eine *.txt Datei erstelle und eine 1 in ihr abspeichere und eine zweite Form öffne Das sieht dann so aus:
    Code:
    System.IO.StreamWriter questzähler = new System.IO.StreamWriter("questzähler.txt");
                questzähler.WriteLine("1");
                questzähler.Flush();
                questzähler.Close();
                Form weiter = new hauptfenster();
                weiter.Show();
    Im Load Event der zweiten Form lasse ich sie dann auslesen und per If Abfrage überprüfen. Probeweise gebe ich eine messagebox aus. Leider bleibt es an der if Abfrage hängen. Er führt immer den Else Block aus. Warum?
    Zweiter Code:
    Code:
     //*.txt mit Questzähler holen
                System.IO.StreamReader laden = new System.IO.StreamReader("questzähler.txt");
                string zähler = laden.ReadToEnd();
                string eins = "1";
                if (Convert.ToString(laden) == eins)
                {
                    MessageBox.Show("Hallo Welt");
                }
                else
                {
                    MessageBox.Show("Fehler");
                }
                laden.Close();
    Hab es schon so versucht:
    Code:
                if (zähler == "1")
    oder so:
    Code:
    string eins = "1";
                if (zähler == eins)
    Alles klappt nicht. Warum nur?
    Danke schonmal, LG
    Tele

  2. #2
    Avatar von zodiac
    zodiac ist offline

    Title
    Benutzer
    seit
    27.04.2009
    Beiträge
    12

    Standard

    Hallo,
    Dein erste Versuch kann schonmal nicht funktionieren. Du kannst nicht einfach ein komplettes Objekt ohne die Read Methode aufzurufen in String konvertieren und dann vergleichen. Das funktioniert nicht. Der Versuch mit deiner Zählervariable müsst eigentlich funktionieren. Hast du mal versucht nur den Inhalt der Textdatei in einer MessageBox auszugeben? Dann wüsste man wenigstens ob das Abspeichern geklappt hat. Versuchs mal mit ReadLine statt ReadToEnd ...dürfte aber eigentlich keinen Unterschied machen

  3. #3
    Avatar von telecaster95
    telecaster95 ist offline
    Themen Starter

    Title
    Benutzer
    seit
    11.04.2011
    Ort
    /home/tele
    Beiträge
    1.617

    Standard

    Ja das mit der messagebox klappt.
    Mit readLine funktionierts. Danke

  4. #4
    Avatar von zodiac
    zodiac ist offline

    Title
    Benutzer
    seit
    27.04.2009
    Beiträge
    12

    Standard

    Jup aber ich hatte die Hoffnung, dass eventuell noch ein zusätzliches Maskierungszeichen gespeichert wurde das die ganze Sache dann unnötig gemacht hat. Naja richtig dran geglaubt habe ich nicht. Gibt die Messagebox einfach nur "1" aus? Keine weiteren Zeichen?

  5. #5
    Avatar von telecaster95
    telecaster95 ist offline
    Themen Starter

    Title
    Benutzer
    seit
    11.04.2011
    Ort
    /home/tele
    Beiträge
    1.617

    Standard

    Ah sorry, mit readLine klappts
    Ja die MessageBox gibt nur eine 1 aus

  6. #6
    Avatar von zodiac
    zodiac ist offline

    Title
    Benutzer
    seit
    27.04.2009
    Beiträge
    12

    Standard

    Also wenns mit ReadLine klappt dann muss doch irgendwas noch drin sein meines Verständnisses nach. Vielleicht wird noch eine zusätzliche Linie am Ende eingefügt. Keine Ahnung das müsste man mal ausprobieren. Warum bindest du im übrigen nicht einfach System.IO ein? Wäre viel weniger Schreibaufwand.

  7. #7
    Avatar von telecaster95
    telecaster95 ist offline
    Themen Starter

    Title
    Benutzer
    seit
    11.04.2011
    Ort
    /home/tele
    Beiträge
    1.617

    Standard

    Warum bindest du im übrigen nicht einfach System.IO ein? Wäre viel weniger Schreibaufwand.Warum bindest du im übrigen nicht einfach System.IO ein? Wäre viel weniger Schreibaufwand.
    Was meinst du damit? Ich Programmiere erst so "richtig" seit einem Jahr und weis noch nicht alles

  8. #8
    Avatar von zodiac
    zodiac ist offline

    Title
    Benutzer
    seit
    27.04.2009
    Beiträge
    12

    Standard

    Nun ja wenn du eine neue "Form" erstellst. Dann stehen zu Beginn gleich die von deinem Programm verwendeten Namespaces. etwa "System" "System.Windows.Forms" usw. In diesen "Namensräumen" sind Klassen enthalten auf die du in deinem Programm zugreifst. Bei Windows.Forms sind das zum Beispiel Methoden um ein Fenster anzuzeigen, Buttons usw. Wenn du diese Namensräume einbindest musst du dich nicht mehr explizit in deinem Code auf sie beziehen. Das kann man in etwa damit vergleichen wie wenn du bereits eine Klasse in deinem Code geschrieben hast und diese ansprichst. Was ich damit meinte war nun, dass wenn du zu beginn

    Code:
    using System.IO
    geschrieben hättest, ein bisschen was von deinem Befehl zum Erzeugen des Streamreader objektes weggefallen wäre.

    Code:
    System.IO.StreamReader laden = new System.IO.StreamReader("questzähler.txt");
    wäre zu
    Code:
    StreamReader laden = new StreamReader("questzähler.txt");
    geworden. Verstanden?

  9. #9
    Avatar von telecaster95
    telecaster95 ist offline
    Themen Starter

    Title
    Benutzer
    seit
    11.04.2011
    Ort
    /home/tele
    Beiträge
    1.617

    Standard

    Ahh Danke. Ja das ist echt Prima

  10. #10
    Avatar von telecaster95
    telecaster95 ist offline
    Themen Starter

    Title
    Benutzer
    seit
    11.04.2011
    Ort
    /home/tele
    Beiträge
    1.617

    Standard

    Ich werde hier noch verrückt
    Funktioniert wieder nicht
    Ich habe mein Programm so geschrieben:
    Button "neu" : Erstellt die txt Datei
    Button "speichern" : Speichert den Aktuellen Stand in der txt Datei. In dem Fall eine 1.
    Button "laden" : liest die txt Datei aus und gibt Probeweise die messagebox aus. Am If befehl haperts wieder

  11. #11
    Avatar von zodiac
    zodiac ist offline

    Title
    Benutzer
    seit
    27.04.2009
    Beiträge
    12

    Standard

    Schreib mal den kompletten Quellcode hier rein bitte.

  12. #12
    Avatar von telecaster95
    telecaster95 ist offline
    Themen Starter

    Title
    Benutzer
    seit
    11.04.2011
    Ort
    /home/tele
    Beiträge
    1.617

    Standard

    Autsch. Von allen Forms? Na gut.
    Also Code der ersten form:
    Code:
    private void buttonbeenden_Click(object sender, EventArgs e)
            {
                this.Close();
            }
            private void buttonneu_Click(object sender, EventArgs e)
            {
                try
                {
                    System.IO.StreamWriter questzähler = new System.IO.StreamWriter("questzähler.txt");
                    questzähler.WriteLine("1");
                    questzähler.Flush();
                    questzähler.Close();
                    Form weiter = new hauptfenster();
                    weiter.Show();
                }
                catch
                {
                    MessageBox.Show("Ein Fehler ist aufgetreten.");
                    this.Close();
                }
            }
            private void buttonladen_Click(object sender, EventArgs e)
            {
                //MessageBox.Show("Diese Funktion steht noch nicht zur Verfügung!");
                try
                {
                    System.IO.StreamReader laden = new System.IO.StreamReader("user.txt");
                    string neu = laden.ReadLine();
                    System.IO.StreamWriter ersetzen = new System.IO.StreamWriter("questzähler.txt");
                    ersetzen.WriteLine("");
                    ersetzen.WriteLine(neu);
                    laden.Close();
                    ersetzen.Flush();
                    ersetzen.Close();
                    MessageBox.Show(neu);
                    Form weiter = new hauptfenster();
                    weiter.Show();
                }
                catch
                {
                    MessageBox.Show("Ein Fehler ist aufgetreten.");
                    this.Close();
                }
            }
        }
    }
    Jetzt den Code von Form hauptfenster:
    Code:
     private void hauptfenster_Load(object sender, EventArgs e)
            {
                //*.txt mit Questzähler holen
                System.IO.StreamReader laden = new System.IO.StreamReader("questzähler.txt");
                string zähler = Convert.ToString(laden.ToString());
                string eins = "1";
                //string zähler = Convert.ToString(laden);
                if (eins == zähler)
                {
                    radioButton1.Text = "Keine Quest";
                    radioButton2.Text = "Rattenproblem";
                    radioButton3.Hide();
                    radioButton4.Hide();
                    radioButton5.Hide();
                    labeltrank.Text = "Tränke";
                    labelkräuter.Text = "Kräuter";
                    label3.Hide();
                    label4.Hide();
                    labellevel.Text = "1";
                    labelangriff.Text = "100";
                    labelverteidigung.Text = "150";
                }
                else
                {
                    MessageBox.Show("Fehler");
                }
                laden.Close();
            }
            private void groupBox2_Enter(object sender, EventArgs e)
            {
            }
            private void buttonausgang_Click(object sender, EventArgs e)
            {
                this.Close();
            }
            private void groupBox3_Enter(object sender, EventArgs e)
            {
            }
            private void buttonmenü_Click(object sender, EventArgs e)
            {
                System.IO.StreamWriter speichern = new System.IO.StreamWriter("user.txt");
                System.IO.StreamReader speicherstand = new System.IO.StreamReader("questzähler.txt");
                string sps = speicherstand.ReadLine();
                speicherstand.Close();
                speichern.WriteLine(sps);
                speichern.Flush();
                speichern.Close();
                Form weiter = new menü();
                weiter.Show();
            }
        }
    }
    Und den Code des Forms menü:
    Code:
     private void buttonbeenden_Click(object sender, EventArgs e)
            {
                this.Close();
            }
            private void buttonhilfe_Click(object sender, EventArgs e)
            {
                MessageBox.Show("Die Hilfe ist noch nicht verfügbar!");
            }
            private void buttontutorial_Click(object sender, EventArgs e)
            {
                MessageBox.Show("Das Tutorial ist noch nicht verfügbar!");
            }
            private void buttonspeichern_Click(object sender, EventArgs e)
            {
                MessageBox.Show("Dein Spielstand wurde gespeichert!");
            }
            private void menü_Load(object sender, EventArgs e)
            {
            }
        }
    }

  13. #13
    Avatar von zodiac
    zodiac ist offline

    Title
    Benutzer
    seit
    27.04.2009
    Beiträge
    12

    Standard

    Hallo,

    Habe hier zumindest schon einmal eine Stelle gefunden, die so nicht funktionieren kann und in der teilweise der Sinn nicht ganz ersichtlich ist.

    Code:
      System.IO.StreamReader laden = new System.IO.StreamReader("questzähler.txt");
                string zähler = Convert.ToString(laden.ToString());
                string eins = "1";
                //string zähler = Convert.ToString(laden);
                if (eins == zähler)
                {
    Du kannst nicht einfach ein Streamreader Objekt in einen String konvertieren OHNE die Read Methode dessen aufzurufen! Erst mit dem Aufruf der Read Methode wird die Datei ausgelesen. Die Read Methode ( oder ReadLine je nachdem) liefert dann einen string zurück, den du dann ganz einfach weiter verwenden kannst.

    Code:
    string zähler = Convert.ToString(laden.ToString());
    Wo da der Fehler liegt , wirst du denke ich selber erkennen...

  14. #14
    Avatar von telecaster95
    telecaster95 ist offline
    Themen Starter

    Title
    Benutzer
    seit
    11.04.2011
    Ort
    /home/tele
    Beiträge
    1.617

    Standard

    Wo da der Fehler liegt , wirst du denke ich selber erkennen..
    Ja das waren meine Versuche, ist auch schon behoben, hab da nur was ausprobiert.
    Zum ersten, hab ich glatt vergessen das mit der read Methode. Danke

  15. #15
    Avatar von telecaster95
    telecaster95 ist offline
    Themen Starter

    Title
    Benutzer
    seit
    11.04.2011
    Ort
    /home/tele
    Beiträge
    1.617

    Standard

    Es klappt immer noch nicht
    Ich versteh das echt nicht..
    Hab den Code jetzt um die read Methode erweitert, funktioniert trotztem nicht

  16. #16
    Avatar von Spyx
    Spyx ist offline

    Title
    Moderator
    seit
    21.08.2006
    Beiträge
    9.155

    Standard

    So sollte es gehen (ungetestet):
    Code:
     private void hauptfenster_Load(object sender, EventArgs e)
            {
                //*.txt mit Questzähler holen
                System.IO.StreamReader laden = new System.IO.StreamReader("questzähler.txt");
                string zähler = laden.ReadLine();
                string eins = "1";
                //string zähler = Convert.ToString(laden);
                if (String.Compare(eins, zähler) == 0)
                {
                    radioButton1.Text = "Keine Quest";
                    radioButton2.Text = "Rattenproblem";
                    radioButton3.Hide();
                    radioButton4.Hide();
                    radioButton5.Hide();
                    labeltrank.Text = "Tränke";
                    labelkräuter.Text = "Kräuter";
                    label3.Hide();
                    label4.Hide();
                    labellevel.Text = "1";
                    labelangriff.Text = "100";
                    labelverteidigung.Text = "150";
                }
                else
                {
                    MessageBox.Show("Fehler");
                }
                laden.Close();
            }
            private void groupBox2_Enter(object sender, EventArgs e)
            {
            }
            private void buttonausgang_Click(object sender, EventArgs e)
            {
                this.Close();
            }
            private void groupBox3_Enter(object sender, EventArgs e)
            {
            }
            private void buttonmenü_Click(object sender, EventArgs e)
            {
                System.IO.StreamWriter speichern = new System.IO.StreamWriter("user.txt");
                System.IO.StreamReader speicherstand = new System.IO.StreamReader("questzähler.txt");
                string sps = speicherstand.ReadLine();
                speicherstand.Close();
                speichern.WriteLine(sps);
                speichern.Flush();
                speichern.Close();
                Form weiter = new menü();
                weiter.Show();
            }
        }
    }

  17. #17
    Avatar von telecaster95
    telecaster95 ist offline
    Themen Starter

    Title
    Benutzer
    seit
    11.04.2011
    Ort
    /home/tele
    Beiträge
    1.617

    Standard

    Nein.
    Leider nicht.
    Sonst noch einer ne Idee?
    Das kann ja irgendwie nicht sein, oder?
    Danke für euer Hilfe bis jetzt

Diese Seite benutzt Cookies Durch die weitere Nutzung der Seite stimmen Sie der Verwendung von Cookies zu. Infos zum Datenschutz