Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Bestanden Lezen Met StreamReader | Datastructuren & Bestandsafhandeling
C# Verder dan de Basis

bookBestanden Lezen Met StreamReader

Je kunt bestanden openen en lezen met behulp van de programmeertaal C#.

Voor het lezen van een bestand maken we een nieuw StreamReader-object aan. Het StreamReader object ontvangt het pad van het bestand.

Note
Opmerking

De term "object" zal in latere secties duidelijker worden, maar voor nu: een object is simpelweg een instantie van een gegevenstype, en StreamReader is een gegevenstype net als int of float. Dus de waarden 1, 2.5f en "Hello World" kunnen technisch gezien worden aangeduid als "objecten" van respectievelijk de int-, float- en string-gegevenstypen.

index.cs

index.cs

copy
1
StreamReader fileVarName = new StreamReader(fullPath);

Hier staat fileVarName voor de variabelenaam waarin het StreamReader-object wordt opgeslagen, en fullPath is het volledige pad van het bestand als een string.

Bijvoorbeeld, om een bestand "text.txt" op het bureaublad te openen met het pad C:/Users/Admin/Desktop/text.txt:

index.cs

index.cs

copy
1
StreamReader textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");
Note
Opmerking

U kunt ook impliciete declaratie gebruiken om de syntaxis iets korter te maken: var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");

Stel dat het bestand text.txt de volgende inhoud heeft:

text.txt

text.txt

copy
12345
This is some example text

Een StreamReader-object heeft een ReadLine-methode die één regel uit het bestand leest en retourneert:

index.cs

index.cs

copy
1234
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); Console.WriteLine(line);

Uitvoer:

This

De methode ReadLine verplaatst de cursor automatisch naar de volgende regel, zodat bij een volgende aanroep de volgende regel wordt gelezen als die er is; anders geeft deze simpelweg null (niets) terug:

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); Console.WriteLine(textFile.ReadLine()); // This Console.WriteLine(textFile.ReadLine()); // is Console.WriteLine(textFile.ReadLine()); // some Console.WriteLine(textFile.ReadLine()); // example Console.WriteLine(textFile.ReadLine()); // text Console.WriteLine(textFile.ReadLine()); // NULL

Uitvoer:

This
is
some
example
text

Voor het lezen van alle regels uit een bestand kan de while-lus worden gebruikt met een voorwaarde die controleert of de volgende regel null is of niet. Hieronder staat een eenvoudige methode om dit te doen:

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); while(line != null) { Console.WriteLine(line); line = textFile.ReadLine(); }

Uitvoer:

This
is
some
example
text

De bovenstaande code kan iets netter worden gemaakt met een truc; daarvoor bekijken we de toekenningsuitspraken. Een toekenningsuitspraak heeft ook een retourwaarde, namelijk de waarde die wordt toegekend. Dit kan worden verduidelijkt met een voorbeeld:

index.cs

index.cs

copy
12
int a; Console.WriteLine(a = 7);

Uitvoer:

7

Het resultaat is 7 omdat de instructie a = 7 de waarde 7 retourneert, wat de waarde is die aan a wordt toegekend.

Deze informatie kan worden gebruikt om op creatieve wijze dezelfde waarde aan meerdere variabelen toe te wijzen in één enkele instructie:

index.cs

index.cs

copy
123456789
int a = 1; int b = 1; int c = 1; a = b = c = 9; Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c);

Uitvoer:

9
9
9

Met deze informatie kan de code voor het lezen van bestanden worden aangepast om deze korter te maken door overbodige code te verwijderen:

index.cs

index.cs

copy
1234567
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while((line = textFile.ReadLine()) != null) { Console.WriteLine(line); }

Binnen de voorwaarde werd eerst een toewijzingsinstructie gebruikt line = textFile.ReadLine(), waarmee de variabele line automatisch wordt bijgewerkt en vervolgens wordt gecontroleerd of deze null is op basis van de geretourneerde waarde van de instructie.

Na het lezen van het bestand moet het ook worden gesloten met de methode Close, anders kan dit mogelijk geheugenlekken veroorzaken of kan het bestand vergrendeld raken en ontoegankelijk worden voor andere processen zolang het programma actief is.

De uiteindelijke code ziet er als volgt uit:

index.cs

index.cs

copy
123456789
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while ((line = textFile.ReadLine()) != null) { Console.WriteLine(line); } textFile.Close();
question-icon
=();

Click or drag`n`drop items and fill in the blanks

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 1. Hoofdstuk 6

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Awesome!

Completion rate improved to 2.04

bookBestanden Lezen Met StreamReader

Veeg om het menu te tonen

Je kunt bestanden openen en lezen met behulp van de programmeertaal C#.

Voor het lezen van een bestand maken we een nieuw StreamReader-object aan. Het StreamReader object ontvangt het pad van het bestand.

Note
Opmerking

De term "object" zal in latere secties duidelijker worden, maar voor nu: een object is simpelweg een instantie van een gegevenstype, en StreamReader is een gegevenstype net als int of float. Dus de waarden 1, 2.5f en "Hello World" kunnen technisch gezien worden aangeduid als "objecten" van respectievelijk de int-, float- en string-gegevenstypen.

index.cs

index.cs

copy
1
StreamReader fileVarName = new StreamReader(fullPath);

Hier staat fileVarName voor de variabelenaam waarin het StreamReader-object wordt opgeslagen, en fullPath is het volledige pad van het bestand als een string.

Bijvoorbeeld, om een bestand "text.txt" op het bureaublad te openen met het pad C:/Users/Admin/Desktop/text.txt:

index.cs

index.cs

copy
1
StreamReader textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");
Note
Opmerking

U kunt ook impliciete declaratie gebruiken om de syntaxis iets korter te maken: var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");

Stel dat het bestand text.txt de volgende inhoud heeft:

text.txt

text.txt

copy
12345
This is some example text

Een StreamReader-object heeft een ReadLine-methode die één regel uit het bestand leest en retourneert:

index.cs

index.cs

copy
1234
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); Console.WriteLine(line);

Uitvoer:

This

De methode ReadLine verplaatst de cursor automatisch naar de volgende regel, zodat bij een volgende aanroep de volgende regel wordt gelezen als die er is; anders geeft deze simpelweg null (niets) terug:

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); Console.WriteLine(textFile.ReadLine()); // This Console.WriteLine(textFile.ReadLine()); // is Console.WriteLine(textFile.ReadLine()); // some Console.WriteLine(textFile.ReadLine()); // example Console.WriteLine(textFile.ReadLine()); // text Console.WriteLine(textFile.ReadLine()); // NULL

Uitvoer:

This
is
some
example
text

Voor het lezen van alle regels uit een bestand kan de while-lus worden gebruikt met een voorwaarde die controleert of de volgende regel null is of niet. Hieronder staat een eenvoudige methode om dit te doen:

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); while(line != null) { Console.WriteLine(line); line = textFile.ReadLine(); }

Uitvoer:

This
is
some
example
text

De bovenstaande code kan iets netter worden gemaakt met een truc; daarvoor bekijken we de toekenningsuitspraken. Een toekenningsuitspraak heeft ook een retourwaarde, namelijk de waarde die wordt toegekend. Dit kan worden verduidelijkt met een voorbeeld:

index.cs

index.cs

copy
12
int a; Console.WriteLine(a = 7);

Uitvoer:

7

Het resultaat is 7 omdat de instructie a = 7 de waarde 7 retourneert, wat de waarde is die aan a wordt toegekend.

Deze informatie kan worden gebruikt om op creatieve wijze dezelfde waarde aan meerdere variabelen toe te wijzen in één enkele instructie:

index.cs

index.cs

copy
123456789
int a = 1; int b = 1; int c = 1; a = b = c = 9; Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c);

Uitvoer:

9
9
9

Met deze informatie kan de code voor het lezen van bestanden worden aangepast om deze korter te maken door overbodige code te verwijderen:

index.cs

index.cs

copy
1234567
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while((line = textFile.ReadLine()) != null) { Console.WriteLine(line); }

Binnen de voorwaarde werd eerst een toewijzingsinstructie gebruikt line = textFile.ReadLine(), waarmee de variabele line automatisch wordt bijgewerkt en vervolgens wordt gecontroleerd of deze null is op basis van de geretourneerde waarde van de instructie.

Na het lezen van het bestand moet het ook worden gesloten met de methode Close, anders kan dit mogelijk geheugenlekken veroorzaken of kan het bestand vergrendeld raken en ontoegankelijk worden voor andere processen zolang het programma actief is.

De uiteindelijke code ziet er als volgt uit:

index.cs

index.cs

copy
123456789
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while ((line = textFile.ReadLine()) != null) { Console.WriteLine(line); } textFile.Close();
question-icon
=();

Click or drag`n`drop items and fill in the blanks

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 1. Hoofdstuk 6
some-alt