Class Datei mit Quellcode verknüpfen

Hallo.

Zu meinem Problem mit: ArgumentOutOfRangeException wurde nicht behandelt , es liegt daran da in der Textdatei die letzte Zeile eine leere Zeile ist. So stürzt das Programm immer ab.

Das liegt daran das ich mit WriteLine() beim StreamWriter in die Textdatei schreibe.


Nun will ich versuchen die letzte Zeile mit FileStream.SetLength. zu entfernen.

Normalerweise dürfte dies bereits behandelt werden. Da ich aus dem File rauslese und manuell den String editiere indem ich die letzte Zeile einfach ignoriere siehe
Code:
if (s3.Equals(s2[i].Remove(s2[i].Length-1)) && (i < max-1))
{
    b = true;
}
--> i<max-1 sollte die letzte Zeile ignorieren.

Poste bitte noch mal jetzt deinen neuen Code, falls du jetzt was kritisches geändert hast.

und Nadriel wenn du möchtest / Zeit hast darfste mir gerne den ganzen Code erklären =D.

Weil ich interessiere mich für sowas

Sag mir konkret was du nicht verstehst, weil ich glaube nicht dass du wirklich den ganzen Code nicht verstehst, so Sachen wie eine einfache if-Anweisung.

MfG Nadriel
 
Moin,

als erstes muss ich mich mal entschuldigen.

Da ich immer noch nicht registriert bin, wie ich es eig. machen wollte, bitte ich euch nicht vor Wut mit irgednwas nach mit zu werfen :eek:. Ich war von Freitag bis Dienstag in Italien im Urlaub, und hatte so keine möglichkeit die Registrierung abzuschließen.

Ich versuch es so schnell ich kann und hoffe das ich heute Abend dran denke es zu machen.

Ansonsten:

1. Wieso [] Klammern anstatt () wo liegt der Unterschied?

2. Unterschied zwischen String und String[]

3. .Length Befehl, was bedeutet er, was macht er?

4. int i = 0; i < max; i++ Was passiert in diesem Teil des Codeabschnittes?

5. s3.Equals(s2[ i ].Remove(s2[ i] .Length-1) Was passiert in diesem Teil des Codeabschnittes?

6. (i < max-1)) hattest du ja bereits erklärt^^


Ein paar Fragen weichen auch vom Code ab oder sind total Simpel. Aber ich lerne C# eigenständig,
da wir in der Schule nur C++ Konsolenanwendungen üben. Bei diesen schreiben wir kleine Programme,
mit Befehlen die man braucht um das Betriebssystem Windows programmieren zu können. Also wir tasten
uns ran.


Also ich hab immer noch den gleichen Quellcode wie du ihn gepostet hast.

Hab halt nur bsp:

private void bLogin_Click(object sender, EventArgs e)

zu

private void button1_Click(object sender, EventArgs e)

gemacht.

Und das bei allen. Natürlich hab ich das ganze dann auch im Quellcode geändert.

Aber wenn du den Qellcode willst, dann warte ich poste ihnn gleich nach.
 
Hab mich mal schlau gemacht.

Fehler beim Programm:

ArgumentOutOfRangeException wurde nicht behandelt.

StartIndex cannot be less than zero.
Parameter name: startIndex


Dann hab ich online bei msdn mal ein bisschen gesucht und bin auf folgednes gestoßen:

ArgumentOutOfRangeException wird ausgelöst, wenn eine Methode aufgerufen wird und mindestens eines der übergebenen Argumente nicht NULL (Nothing in Visual Basic) ist und keinen gültigen Wert enthält.

...

http://msdn.microsoft.com/de-de/library/system.argumentoutofrangeexception(v=VS.80).aspx



Ausnahmetyp: ArgumentOutOfRangeException

Bedingung: Es wurde versucht, den value-Parameter auf einen kleineren Wert als 0 festzulegen.

http://msdn.microsoft.com/de-de/library/system.io.filestream.setlength(VS.80).aspx


gruß
headhuner
 
sry für nen weiteren doppelpost, hab den quellcode vergessen zu posten.

Form1.cs

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace Loginmaske
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
            Keko k = new Keko("C:\\test.txt");
 
            String s = k.read();
            char[] a = new char[1];
            a[0] = '\n';
 
            String[] s2 = s.Split(a);
            bool b = false;
 
            String s3 = textBox1.Text + " " + textBox2.Text;
 
            int max = s2.Length;
 
            for (int i = 0; i < max; i++)
            {
                if (s3.Equals(s2[i].Remove(s2[i].Length-1)) && (i < max-1))
                {
                    b = true;
                }
                else if(s3.Equals(s2[i]))
                {
                    b = true;
                }
 
 
            }
            if (b)
            {
                MessageBox.Show("Login erfolgreich!");
            }
            else
            {
                MessageBox.Show("Login fehlgeschlagen!");
            }
        }

	  private void textBox1_TextChanged(object sender, EventArgs e)
	  {

	  }

	  private void textBox2_TextChanged(object sender, EventArgs e)
	  {

	  }

	  private void button2_Click(object sender, EventArgs e)
	  {
		Form2 form2 = new Form2();
		form2.Show();
	  }
    }
}


Keko.cs

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;
 
namespace Loginmaske
{
    class Keko
    {
        private string fileName = "";
 
        public Keko(string fileName)
        {
            this.fileName = fileName;
        }
 
        public string read()
        {
            StreamReader myReader = File.OpenText(fileName);
            String s = myReader.ReadToEnd();
            myReader.Close();
            return s;
        }
    }
}

So hier is noch der Quellcode.

Und ochma verzeihung wegen Doppelpost.

gruß
headhunter
 
1. Wieso [] Klammern anstatt () wo liegt der Unterschied?

2. Unterschied zwischen String und String[]

3. .Length Befehl, was bedeutet er, was macht er?

4. int i = 0; i < max; i++ Was passiert in diesem Teil des Codeabschnittes?

5.
Code:
s3.Equals(s2[i].Remove(s2[i].Length-1)
Was passiert in diesem Teil des Codeabschnittes?

6. (i < max-1)) hattest du ja bereits erklärt^^

zu 1.: was du jetzt konkret meinst verstehe ich nicht ganz aber um gleich die 2. Frage auch einzubauen, mit Datentyp[] definierst du ein Array von deinen angegeben Datentyp. Da du die Frage stellst denke ich mal du weißt auch nicht was ein Array ist. Um das zu beantworten solltest du dich lieber auf C#-Tutorials umschaun. Wie gesagt deine andere Frage zu "()" versteh ich nicht ganz meinst du zB String asdf = new String()? () kennzeichnen zB Funktionsklammern, aber das solltest du glaube ich wissen^^ und der konkrete Unterschied zwischen String und String[] liegt darin, dass String bloß eine Zeichenkette beinhaltet/ beinhalten kann und String[] eine Menge von Zeichenketten beinhaltet/ beinhalten kann.

zu 3.: .Length gibt dir die Länge eines beliebigen Datentyps zurück. Bei einem String[] die Länge des Arrays zB bei String[5] liefert es 5. Bei Nicht-Arrays also bei Standarddatentypen wie int, char, String etc. liefert er die Länge des Wertes die die Variable beinhaltet.

zu 4.: Das ist das was man in eine for-Schleife immer einträgt.
Mit einem Beispiel einfacher erklärlich:
Code:
for(int i = 0; i < MAX; i ++) 
// die Variable i wird temporär angelegt, dh bis die for-Schleife zu Ende geht
// i = 0 gibt an bei welchem Wert die Schleife beginnt
// i < MAX gibt an bei welchem Wert die Schleife endet
// i++ entspricht i = i + 1 dh bei jedem fertigen Durchlauf wird i um 1 erhöht
{
//hier irgendwas tun ^^
}

zu 5.: Das habe ich schon mal erklärt, hattest du dass da nicht verstanden?

zu 6.: Hoffe du hasts auch verstanden ;)

MfG Nadriel
 
Moin,

über Arrays hab ich mich bereits informiert, doch die [] Klammern vergessen und etc. Ich schau mirs einfach nochma an^^.

zu 5., ich hatte bemerkt das du mir das bereits erklärt hattest, als ich den Thread nochmal durchgegangen bin, mein fehler^^

Mit dem i++ und etc. hab ich nun verstanden, danke :)

zu 6. Joa hab ich inzwischen auch verstanden :D

Jedoch besteht das Problem immer noch. Anscheinend wird diese Funktion nicht behandelt, wenn ich mich nicht irren sollte.

Ist keine Leere Zeile an dem Textdokument vorhanden, so funktioniert alles einwandfrei. Ist die leere Zeile vorhanden, so kommt die Fehlermeldung :(.

Nur wo der Haken an der Sache ist, lässt mich vor einem Rätsel stehen.

Achja, ich hab mal die && Zeichen zu einem + gemacht, dann hat es nicht geklappt, und bei einem & hat es keine Probleme gegeben, jedoch das Ergebnis war gleich.

gruß
headhunter
 
Achja, ich hab mal die && Zeichen zu einem + gemacht, dann hat es nicht geklappt, und bei einem & hat es keine Probleme gegeben, jedoch das Ergebnis war gleich.
Mit dem spiel lieber nicht rum, "&&" bedeutet was ganz anderes als "+" oder "&" also lass das lieber, kannst dich ja im internet umsehen was das genau bedeutet ;)

gruß Nadriel
 
Moin,

jo werd ich machen ^^

Das Ergebnis war zwa es gleiche aber ma schauen xD


ps:
Code:
( i < max -1))

Wird anscheinend nicht behandelt oder funktioniert nicht so wie es funktionieren soll, weil das Problem besteht immer noch :(

Naja ich hab mir ne Sicherheitskopie gemacht und spiel an der ma en bisschen rum, vllt. schaff ichs ja aus glück das Problem zu beheben xD

Oder hast du vllt. noch ne Idee? :eek:

Gruß
headhuner
 
Es gibt wohl 2 Möglichkeiten:
1.) Du schaust dir das ganze mal im Debugger an und gehst das Schritt für Schritt durch
2.) Du postest den gesamten Code und ein netter Mensch aus dem Forum geht das ganze durch

Gruß,

badday
 
Ich registriere mich nachher.

Dann kommt der quellcode hier rein

dann gehe ich debugger gleichzeitig durch.


gruß
 

Neue Beiträge

Zurück