Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Læsning af Filer med StreamReader | Datastrukturer og Filhåndtering
C# Ud Over Det Grundlæggende

bookLæsning af Filer med StreamReader

Du kan åbne og læse filer ved hjælp af programmeringssproget C#.

For at læse en fil opretter vi et nyt StreamReader-objekt. StreamReader objektet tager stien til filen som parameter.

Note
Bemærk

Begrebet "objekt" vil blive mere klart i de senere afsnit, men for forståelsens skyld – et objekt er blot en instans af en datatype, og StreamReader er en datatype ligesom int eller float. Så værdierne 1, 2.5f og "Hello World" kan teknisk set omtales som "objekter" af henholdsvis int-, float- og string-datatyperne.

index.cs

index.cs

copy
1
StreamReader fileVarName = new StreamReader(fullPath);

Her repræsenterer fileVarName navnet på variablen, hvor du gemmer StreamReader-objektet, og fullPath skal være den fulde sti til filen som en streng.

For eksempel kan du åbne filen "text.txt" på Skrivebordet, som har stien C:/Users/Admin/Desktop/text.txt:

index.cs

index.cs

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

Du kan også bruge implicit deklaration for at gøre syntaksen en smule kortere: var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");

Antag, at filen text.txt har følgende indhold:

text.txt

text.txt

copy
12345
This is some example text

Et StreamReader-objekt har en ReadLine-metode, som læser én linje fra filen og returnerer den:

index.cs

index.cs

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

Output:

This

Metoden ReadLine flytter automatisk markøren til næste linje, så når den kaldes igen, læser den den næste linje, hvis der er en. Ellers returnerer den blot null (intet):

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

Output:

This
is
some
example
text

For at læse alle linjer fra en fil kan vi bruge en while-løkke med en betingelse, der kontrollerer, om den næste linje er null eller ej. Følgende er en enkel metode til at gøre dette:

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(); }

Output:

This
is
some
example
text

Du kan gøre ovenstående kode lidt mere overskuelig ved at anvende et trick; lad os derfor se nærmere på tildelingsudsagn. Et tildelingsudsagn har også en returværdi, som er den værdi, der tildeles. Dette kan illustreres med et eksempel:

index.cs

index.cs

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

Output:

7

Den returnerer 7, fordi udsagnet a = 7 returnerer 7, hvilket er den værdi, der tildeles til a.

Denne viden kan anvendes til at udføre kreative handlinger, såsom at tildele den samme værdi til flere variabler i én enkelt erklæring:

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);

Output:

9
9
9

Ved at bruge denne information kan fil-læsningskoden forkortes ved at fjerne unødvendig kode:

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); }

Inde i betingelsen brugte du først en tildelingssætning line = textFile.ReadLine(), som automatisk opdaterer variablen line og derefter kontrollerer, om den er null ud fra sætningens returværdi.

Efter at have læst filen skal du også lukke den ved hjælp af metoden Close, ellers kan det potentielt forårsage hukommelseslækager, eller filen kan blive låst og utilgængelig fra andre steder, så længe programmet kører.

Den endelige kode vil se sådan ud:

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

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 6

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Awesome!

Completion rate improved to 2.04

bookLæsning af Filer med StreamReader

Stryg for at vise menuen

Du kan åbne og læse filer ved hjælp af programmeringssproget C#.

For at læse en fil opretter vi et nyt StreamReader-objekt. StreamReader objektet tager stien til filen som parameter.

Note
Bemærk

Begrebet "objekt" vil blive mere klart i de senere afsnit, men for forståelsens skyld – et objekt er blot en instans af en datatype, og StreamReader er en datatype ligesom int eller float. Så værdierne 1, 2.5f og "Hello World" kan teknisk set omtales som "objekter" af henholdsvis int-, float- og string-datatyperne.

index.cs

index.cs

copy
1
StreamReader fileVarName = new StreamReader(fullPath);

Her repræsenterer fileVarName navnet på variablen, hvor du gemmer StreamReader-objektet, og fullPath skal være den fulde sti til filen som en streng.

For eksempel kan du åbne filen "text.txt" på Skrivebordet, som har stien C:/Users/Admin/Desktop/text.txt:

index.cs

index.cs

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

Du kan også bruge implicit deklaration for at gøre syntaksen en smule kortere: var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");

Antag, at filen text.txt har følgende indhold:

text.txt

text.txt

copy
12345
This is some example text

Et StreamReader-objekt har en ReadLine-metode, som læser én linje fra filen og returnerer den:

index.cs

index.cs

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

Output:

This

Metoden ReadLine flytter automatisk markøren til næste linje, så når den kaldes igen, læser den den næste linje, hvis der er en. Ellers returnerer den blot null (intet):

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

Output:

This
is
some
example
text

For at læse alle linjer fra en fil kan vi bruge en while-løkke med en betingelse, der kontrollerer, om den næste linje er null eller ej. Følgende er en enkel metode til at gøre dette:

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(); }

Output:

This
is
some
example
text

Du kan gøre ovenstående kode lidt mere overskuelig ved at anvende et trick; lad os derfor se nærmere på tildelingsudsagn. Et tildelingsudsagn har også en returværdi, som er den værdi, der tildeles. Dette kan illustreres med et eksempel:

index.cs

index.cs

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

Output:

7

Den returnerer 7, fordi udsagnet a = 7 returnerer 7, hvilket er den værdi, der tildeles til a.

Denne viden kan anvendes til at udføre kreative handlinger, såsom at tildele den samme værdi til flere variabler i én enkelt erklæring:

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);

Output:

9
9
9

Ved at bruge denne information kan fil-læsningskoden forkortes ved at fjerne unødvendig kode:

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); }

Inde i betingelsen brugte du først en tildelingssætning line = textFile.ReadLine(), som automatisk opdaterer variablen line og derefter kontrollerer, om den er null ud fra sætningens returværdi.

Efter at have læst filen skal du også lukke den ved hjælp af metoden Close, ellers kan det potentielt forårsage hukommelseslækager, eller filen kan blive låst og utilgængelig fra andre steder, så længe programmet kører.

Den endelige kode vil se sådan ud:

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

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 6
some-alt