Lä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.
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
1StreamReader 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
1StreamReader textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");
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
12345This is some example text
Ett StreamReader
-objekt har en metod ReadLine
som läser en rad från filen och returnerar den:
index.cs
1234var 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
12345678var 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
12345678var 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
12int 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
123456789int 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
1234567var 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
123456789var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while ((line = textFile.ReadLine()) != null) { Console.WriteLine(line); } textFile.Close();
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
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
Lä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.
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
1StreamReader 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
1StreamReader textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");
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
12345This is some example text
Ett StreamReader
-objekt har en metod ReadLine
som läser en rad från filen och returnerar den:
index.cs
1234var 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
12345678var 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
12345678var 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
12int 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
123456789int 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
1234567var 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
123456789var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while ((line = textFile.ReadLine()) != null) { Console.WriteLine(line); } textFile.Close();
Tack för dina kommentarer!