Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Läsa Filer med StreamReader | Datastrukturer och Filhantering
C# Bortom Grunderna

bookLäsa Filer med StreamReader

Du kan öppna och läsa filer med hjälp av programmeringsspråket C#.

För att läsa en fil skapar vi ett nytt StreamReader-objekt. StreamReader objektet tar sökvägen till filen som parameter.

Note
Notera

Begreppet "objekt" kommer att förtydligas i senare avsnitt, men för förståelsens skull – ett objekt är helt enkelt en instans av en datatyp, och StreamReader är en datatyp precis som int eller float. Så värdena 1, 2.5f och "Hello World" kan tekniskt sett kallas "objekt" av datatyperna int, float respektive string.

index.cs

index.cs

copy
1
StreamReader fileVarName = new StreamReader(fullPath);

Här representerar fileVarName variabelnamnet där du lagrar StreamReader-objektet, och fullPath ska vara den fullständiga sökvägen till filen i form av en sträng.

Till exempel kan du öppna en fil "text.txt" på Skrivbordet som har sökvägen C:/Users/Admin/Desktop/text.txt:

index.cs

index.cs

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

Du kan även använda implicit deklaration för att göra syntaxen något kortare: var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");

Anta att filen text.txt har följande innehåll:

text.txt

text.txt

copy
12345
This is some example text

Ett StreamReader-objekt har en metod ReadLine som läser en rad från filen och returnerar den:

index.cs

index.cs

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

Utdata:

This

Metoden ReadLine flyttar automatiskt markören till nästa rad, så när den anropas igen läser den nästa rad om det finns någon, annars returnerar den helt enkelt null (inget):

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

Utdata:

This
is
some
example
text

För att läsa alla rader från en fil kan vi använda en while-loop med ett villkor som kontrollerar om nästa rad är null eller inte. Följande är ett enkelt sätt att göra detta:

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

Utdata:

This
is
some
example
text

Du kan göra koden ovan lite snyggare med ett knep, för det ska vi titta på tilldelningssatser. En tilldelningssats har också ett returvärde, vilket är det värde som tilldelas. Det kan förstås med ett exempel:

index.cs

index.cs

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

Utdata:

7

Den returnerar 7 eftersom satsen a = 7 returnerar 7, vilket är värdet som tilldelas a.

Du kan använda denna information för att göra kreativa saker, som att tilldela samma värde till flera variabler i en och samma sats:

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

Utdata:

9
9
9

Med denna information kan filavläsningskoden förkortas genom att ta bort onödig kod:

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

Inuti villkoret användes först en tilldelningssats line = textFile.ReadLine() som automatiskt uppdaterar variabeln line och därefter kontrollerar om den är null baserat på satsens returvärde.

Efter att filen har lästs måste du även stänga den med metoden Close, annars kan det potentiellt orsaka minnesläckor eller göra att filen låses och blir otillgänglig från andra platser så länge programmet körs.

Den slutliga koden kommer att se ut så här:

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 allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 6

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Suggested prompts:

Can you explain how the assignment inside the while loop works?

What happens if I forget to close the StreamReader?

Can you show how to handle errors when reading a file?

Awesome!

Completion rate improved to 2.04

bookLäsa Filer med StreamReader

Svep för att visa menyn

Du kan öppna och läsa filer med hjälp av programmeringsspråket C#.

För att läsa en fil skapar vi ett nytt StreamReader-objekt. StreamReader objektet tar sökvägen till filen som parameter.

Note
Notera

Begreppet "objekt" kommer att förtydligas i senare avsnitt, men för förståelsens skull – ett objekt är helt enkelt en instans av en datatyp, och StreamReader är en datatyp precis som int eller float. Så värdena 1, 2.5f och "Hello World" kan tekniskt sett kallas "objekt" av datatyperna int, float respektive string.

index.cs

index.cs

copy
1
StreamReader fileVarName = new StreamReader(fullPath);

Här representerar fileVarName variabelnamnet där du lagrar StreamReader-objektet, och fullPath ska vara den fullständiga sökvägen till filen i form av en sträng.

Till exempel kan du öppna en fil "text.txt" på Skrivbordet som har sökvägen C:/Users/Admin/Desktop/text.txt:

index.cs

index.cs

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

Du kan även använda implicit deklaration för att göra syntaxen något kortare: var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");

Anta att filen text.txt har följande innehåll:

text.txt

text.txt

copy
12345
This is some example text

Ett StreamReader-objekt har en metod ReadLine som läser en rad från filen och returnerar den:

index.cs

index.cs

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

Utdata:

This

Metoden ReadLine flyttar automatiskt markören till nästa rad, så när den anropas igen läser den nästa rad om det finns någon, annars returnerar den helt enkelt null (inget):

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

Utdata:

This
is
some
example
text

För att läsa alla rader från en fil kan vi använda en while-loop med ett villkor som kontrollerar om nästa rad är null eller inte. Följande är ett enkelt sätt att göra detta:

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

Utdata:

This
is
some
example
text

Du kan göra koden ovan lite snyggare med ett knep, för det ska vi titta på tilldelningssatser. En tilldelningssats har också ett returvärde, vilket är det värde som tilldelas. Det kan förstås med ett exempel:

index.cs

index.cs

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

Utdata:

7

Den returnerar 7 eftersom satsen a = 7 returnerar 7, vilket är värdet som tilldelas a.

Du kan använda denna information för att göra kreativa saker, som att tilldela samma värde till flera variabler i en och samma sats:

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

Utdata:

9
9
9

Med denna information kan filavläsningskoden förkortas genom att ta bort onödig kod:

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

Inuti villkoret användes först en tilldelningssats line = textFile.ReadLine() som automatiskt uppdaterar variabeln line och därefter kontrollerar om den är null baserat på satsens returvärde.

Efter att filen har lästs måste du även stänga den med metoden Close, annars kan det potentiellt orsaka minnesläckor eller göra att filen låses och blir otillgänglig från andra platser så länge programmet körs.

Den slutliga koden kommer att se ut så här:

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 allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 6
some-alt