Frage von Waldelb3, 67

C# - Programm kann selber geschriebene Datei nicht lesen, wo ist der Fehler?

Hallo,

ich habe in C# ein Programm geschrieben, dass Daten aus einer txt-Datei auslesen, und sie danach wieder in die selbe Datei schreiben soll. Problem ist, dass das Schreiben zwar soweit funktioniert, dass ich die Datei im Editor öffnen und lesen kann, dass Programm dies allerdings nicht schafft.

Hier einmal der Code zum Einlesen:

            System.IO.StreamReader liste = new System.IO.StreamReader(@"d:\vokabeln.txt", Encoding.GetEncoding(1252));

            while ((line = liste.ReadLine()) != null)
            {
                aktuell = line.Split('\t');
                vokabeln.Add(aktuell);
                count++;
            }


            liste.Close();

Und hier der Code zum Schreiben:

        using (System.IO.StreamWriter datei = new System.IO.StreamWriter(@"D:\vokabeln.txt", false, Encoding.GetEncoding(1252)))
        {
            foreach (string[] zeile in vokabeln)
            {
                datei.WriteLine(zeile[0] + "\t" + zeile[1] + "\n");
            }
            datei.Close();
        }

Das Encoding ist deshalb, weil der Text französische Sonderzeichen enthält.

Danke schonmal für Hilfe! :)

Antwort
von Suboptimierer, 46

Erzeuge mal zum Testen einen zweiten Reader komplett neu und losgelöst vom ersten.

Kommentar von Suboptimierer ,

Auf http://www.dotnetperls.com/streamreader steht, dass du die Funktion Dispose() auf dem Reader ausführen solltest.

Kommentar von ceevee ,

Wenn das using() {} beendet ist, wird am Ende immer Dispose() aufgerufen.

https://msdn.microsoft.com/de-de/library/yh598w02.aspx

Antwort
von ceevee, 42

Wenn du using (StreamWriter) {} ... machst, dann wird der Dateihandler automatisch geschlossen, wenn der Block zuende ist. Für den StreamReader gilt dasselbe. datei.Close() und liste.Close() sind also unnötig und könnten sogar ein Problem sein, weil du 2x hintereinander versuchst, ein und denselben Handler zu schließen. 

Welche Fehlermeldung kriegst du denn?

Kommentar von Waldelb3 ,

Das ist auch etwas ganz Komisches:

Ich bekomme zwar keinen Fehler, aber wenn ich das mit try - catch abkapsle, springt der trotzdem in die catch-Funktion rein...

Und ohne try-catch reagiert das Programm nachher nichtmehr... (zumindest kann ich es nichtmehr schließen. Bei anderen Sachen schmiert es dann ab (wegen array-zugriffen, die es nicht gibt)

Kommentar von ceevee ,

Was steht denn in der Fehlermeldung? Also etwa

try {

// dein Code

}

catch (Exception exception) {

Console.WriteLine(exception.errorMessage);

}

oder setz mal im catch-Block einen Haltepunkt und guck in die exception rein.

Kommentar von Waldelb3 ,

"Der Index war ausserhalb des Arraybereichs."

"vokabeln" ist eine List aus Arrays, ich weiß nicht, ob das dadran liegen könnte...

Kommentar von Waldelb3 ,

Beim Debuggen sieht man, dass das, was der einließt, häufig einfach ein leerer String ist. Leerzeilen oder so gibts in der Datei aber nicht...

Kommentar von JavaTheHutt ,

Können alle eingelesenen Zeilen am Tabulator ( \t ) aufgespalten werden?

Kommentar von Waldelb3 ,

Normalerweise sollte das der Fall sein. In der Datei befinden sich zumindest nur Zeilen, in denen ein Tab ist.

Allerdings scheint es "versteckte" Zeilen zu geben, in denen nichts steht... (Die in der Datei im Editor nicht drin sind)

Keine passende Antwort gefunden?

Fragen Sie die Community