Einführung


In diesem Tutorial lernst du, wie man mit VisualStudio in C# Dateien einliest und wie man mit Exceptions umgeht.

Die COUNT IT wünscht dir viel Spaß beim Experimentieren!

Vorbereitung


Öffne Visual Studio und erstelle eine neue Konsolenapplikation (Console Application). Nun wurde das Projekt erstellt und bereits die Program.cs Datei geöffnet. Wird die App mit dem grünen Startbutton (oder mit F5) gestartet öffnet sich ein Konsolenfenster und der Code in der Main Methode wird aufgerufen.

Auf der Suche nach weiteren C# Tutorials?

Hier entlang

Los geht's!


Datei einlesen

Als Erstes erstelle eine Datei in einem Ordner deiner Wahl, beispielsweise "Example.txt". Nun musst du in deinem Programm den Namespace System.IO importieren. Schreibe dafür "using System.IO;" an den Anfang deines Programmes.

Nun wollen wir deine erstellte Datei als String einlesen. Die "File"-Klasse bietet hierfür mehrere Möglichkeiten. 

  • Die ReadAllText-Methode liest den Inhalt der Datei als einzigen String ein. 
  • Die ReadAllLines-Methode liest den Inhalt der Datei als Array (Liste) von Strings ein, wo jede Zeile in der Datei ein Element im Array ist.
// Liest die Datei Example.txt im Ordner Tutorial im C-Laufwerk als String ein string content = File.ReadAllText(@"C:\Tutorial\Example.txt");
text/x-csharp
Hinweis

Pfadnamen haben unter Windows als Trennteichen einen Backslash ("\"). Unglücklicher Weise wird ein Backslash auch zum Escapen von Sonderzeichen verwendet. Wenn man beispielsweise ein Anführungszeichen, oder einen Backslash in einem String verwenden möchte muss man davor einen Backslash schreiben (" \" " bzw. " \\ "), damit klar ist, dass dies nicht das Ende des String ist, sondern ein Anführungszeichen.

Das "@"-Symbol vor dem String (verbatim string literal) sorgt dafür, dass man ohne Probleme einen Backslash schreiben kann, ohne diesen extra escapen zu müssen.

Exception Handling

Der Code oben funktioniert nur, wenn die Datei an dem angegebenen Pfad existiert. Ist die Datei nicht vorhanden oder der Pfadname falsch, dann stürzt das Programm ab und man sieht eine Exception im VisualStudio.

Hierfür gibt es try-catch-Blöcke. Sie können alle, oder nur bestimmte Exceptions abfangen und wir können dann Code schreiben, der nur im Fehlerfall ausgeführt wird, zb. eine Fehlermeldung in der Konsole ausgeben.

try { // Code hier wird ausgeführt, bis eine Exception auftritt // Bei einer Exception wird in den catch-Block gesprungen // Liest die Datei Example.txt im Ordner Tutorial im C-Laufwerk als String ein string content = File.ReadAllText(@"C:\Tutorial\Example.txt"); } catch (Exception ex) { // Code hier wird nur ausgeführt, wenn irgendeine Exception im try-Block auftritt // Fehler in der Konsole ausgeben Console.WriteLine("Ein Fehler ist aufgetreten!"); Console.WriteLine(ex.Message); }
text/x-csharp

Wenn die App gestartet wird, wird der Try-Block aufgerufen und versucht, die Datei zu lesen. Nur wenn eine Exception auftritt, beispielsweise wenn die Datei nicht vorhanden ist, wird der Code im Catch-Block aufgerufen - tritt keine Exception auf, wird der Code einfach übersprungen.

Mehrere Exceptions abfangen

An einen Try-Block können beliebig viele Catch-Blöcke für verschiedene Exceptions angehängt werden.

Bewegt man die Maus auf eine Methode, wird angezeigt, ob und welche Exceptions diese werfen kann. In der Microsoft Dokumentation kannst du nachlesen, welche Exceptions wann geworfen werden.

So kann man je nach Exception anders reagieren. Wenn die Datei nicht existiert kann man dann beispielsweise einen anderen Text ausgeben, als wenn der Ordner nicht existiert.

try { // Code hier wird ausgeführt, bis eine Exception auftritt // Bei einer Exception wird in den catch-Block gesprungen // Liest die Datei Example.txt im Ordner Tutorial im C-Laufwerk als String ein string content = File.ReadAllText(@"C:\Tutorial\Example.txt"); } catch (FileNotFoundException ex) { // Wird aufgerufen, wenn im Ordner keine Datei mit dem Namen "Example.txt" existiert Console.WriteLine("Da war ein Problem!"); Console.WriteLine("Gehe sicher, dass die Datei richtig benannt ist: Exampl.txt"); } catch (DirectoryNotFoundException ex) { // Wird ausgeführt, wenn der Ordner nicht existiert Console.WriteLine("Da war ein Problem!"); Console.WriteLine(@"Gehe sicher, dass der Ordner C:\Lesson22 existiert"); } catch (Exception ex) { // Code hier wird nur ausgeführt, wenn irgendeine Exception im try-Block auftritt Console.WriteLine("Ein Fehler ist aufgetreten!"); Console.WriteLine(ex.Message); }
text/x-csharp

Nach den Catch-Blöcken kann noch ein Finally-Block hinzugefügt werden. Der Code im Finally-Block wird immer ausgeführt, wenn eine Exception geworfen wurde, aber auch, wenn alles ohne Fehler durchgelaufen ist.

Dies hat den Zweck, dass man hier beispielsweise Streams schließen kann oder um Variablen zurückzusetzen, da der Code immer ausgeführt wird und so der Stream immer geschlossen wird.

try { // Code hier wird ausgeführt, bis eine Exception auftritt // Bei einer Exception wird in den catch-Block gesprungen // Liest die Datei Example.txt im Ordner Tutorial im C-Laufwerk als String ein string content = File.ReadAllText(@"C:\Tutorial\Example.txt"); } catch (Exception ex) { // Code hier wird nur ausgeführt, wenn irgendeine Exception im try-Block auftritt Console.WriteLine("Ein Fehler ist aufgetreten!"); Console.WriteLine(ex.Message); } finally { // Code hier wird immer ausgeführt, // egal, ob ein Fehler auftrat oder nicht Console.WriteLine("Programm fertig!"); }
text/x-csharp

Du möchtest eine grafische App machen?

Klicke hier

Vollständiger Sourcecode


class Program { static void Main(string[] args) { try { // Code hier wird ausgeführt, bis eine Exception auftritt // Bei einer Exception wird in den catch-Block gesprungen // Liest die Datei Example.txt im Ordner Tutorial im C-Laufwerk als String ein string content = File.ReadAllText(@"C:\Tutorial\Example.txt"); } catch (FileNotFoundException ex) { // Wird aufgerufen, wenn im Ordner keine Datei mit dem Namen "Example.txt" existiert Console.WriteLine("Da war ein Problem!"); Console.WriteLine("Gehe sicher, dass die Datei richtig benannt ist: Exampl.txt"); } catch (DirectoryNotFoundException ex) { // Wird ausgeführt, wenn der Ordner nicht existiert Console.WriteLine("Da war ein Problem!"); Console.WriteLine(@"Gehe sicher, dass der Ordner C:\Lesson22 existiert"); } catch (Exception ex) { // Code hier wird nur ausgeführt, wenn irgendeine Exception im try-Block auftritt Console.WriteLine("Ein Fehler ist aufgetreten!"); Console.WriteLine(ex.Message); } finally { // Code hier wird immer ausgeführt, // egal, ob ein Fehler auftrat oder nicht Console.WriteLine("Programm fertig!"); } Console.WriteLine("Frohes Programmieren wuenscht deine COUNT IT!"); } }
text/x-csharp

Über Digital Dojo

Das Digital Dojo ist der virtuelle Übungsraum von COUNT IT.

Angehende Programmierer*innen, Code-Neulinge, Wiedereinsteiger*innen und Fortgeschrittene finden hier das nötige Rüstzeug für ihre Karriere.

Du möchtest deine Lehre bei COUNT IT starten? Dann bist du hier richtig - besiege deine Gegner im Dojo Game und sichere dir deine Lehrstelle!

Inspire your career.

Newsletter abonnieren

Der COUNT IT Newsletter liefert viermal jährlich interessante Neuigkeiten über das Unternehmen. Gleich anfordern!