Stream i C#: StreamReader & StreamWriter [Eksempel]

โšก Smart opsummering

AC# stream er et lag mellem din applikation og en fil, der lader dig lรฆse eller skrive data i smรฅ bidder. Her lรฆrer du, hvordan StreamReader og Stream fungererWriter arbejde, med eksempler og de vigtigste strรธmningstyper.

  • ???? Hvad er det: En stream er et mellemliggende lag mellem din applikation og en fil.
  • ???? StreamReader: StreamReader lรฆser tekst fra en fil รฉn linje eller et stykke ad gangen.
  • โœ๏ธ StreamWriter: StreamWriter skriver tekst til en fil via en stream.
  • ๐Ÿงฉ Strรธmtyper: FileStream, MemoryStream og BufferedStream er alle afledt af Stream-klassen.
  • ๐Ÿค– AI-hjรฆlp: AI-vรฆrktรธjer som GitHub Copilot genererer C# stream-kode รธjeblikkeligt.

C# Stream Reader og Writer

Hvad er C# Stream?

I C#-filoperationer bruges streams normalt til at lรฆse og skrive til filer. En stream er et ekstra lag, der oprettes mellem et program og en fil. Streamen bruges til at sikre glatte lรฆse- og skriveoperationer til filen.

Streams bruges normalt ved lรฆsning af data fra store filer. Ved at bruge streams opdeles data fra store filer i smรฅ bidder og sendes til streamen. Disse bidder af data kan derefter lรฆses fra applikationen.

Grunden til at opdele det i smรฅ bidder er pรฅ grund af ydeevnepรฅvirkningen af โ€‹โ€‹at lรฆse en stor fil i รฉt skud. Hvis du skulle lรฆse dataene fra f.eks. en 100 MB fil pรฅ รฉn gang, kunne din applikation bare hรฆnge og blive ustabil. Den bedste tilgang er sรฅ at bruge streams til at opdele filen i hรฅndterbare bidder.

Sรฅ nรฅr en skriveoperation udfรธres pรฅ filen, bliver de data, der skal skrives, fรธrst skrevet til strรธmmen. Fra streamen skrives dataene derefter til filen. Det samme gรฆlder for lรฆseoperationen. I lรฆseoperationen overfรธres data fรธrst fra filen til streamen. Dataene lรฆses derefter fra applikationen via streamen. Lad os se pรฅ et eksempel pรฅ, hvordan vi kan lรฆse og skrive ved hjรฆlp af streams.

Typer af strรธmme i C#

Alle streamklasser i C# stammer fra abstract Stream klasse i System.IO navnerum. Hver type er rettet mod en forskellig datakilde, men deler de samme lรฆse- og skrivemetoder. De mest almindeligt anvendte strรธmme er anfรธrt nedenfor.

  • FILESTREAM lรฆser fra og skriver til filer pรฅ disken, รฉn byte eller blok ad gangen.
  • MemoryStream lagrer data i hukommelsen i stedet for en fil, hvilket er nyttigt til midlertidige buffere.
  • BufferedStream ombryder en anden strรธm for at reducere antallet af langsomme disk- eller netvรฆrksoperationer.
  • Netvรฆrksstrรธm sender og modtager data over en netvรฆrkssocket.

Til arbejde med tekst tilbyder C# StreamReader og StreamWriter hjรฆlperklasser, som omslutter en strรธm og er dรฆkket i de nรฆste afsnit.

Stream Reader

Stream-lรฆseren bruges til at lรฆse data fra en fil ved hjรฆlp af streams. Dataene fra filen lรฆses fรธrst ind i strรธmmen. Derefter lรฆser applikationen dataene fra streamen.

For vores eksempel vil vi antage, at vi har en fil i D-drevet kaldet Eksempel.txt. Filen vil vรฆre en simpel tekstfil og have 2 linjer som vist nedenfor

  • Guru99 โ€“ .Net
  • Guru99-C#

For vores eksempel vil vi oprette en simpel konsolapplikation og arbejde med filstrรธmme

Lad os se pรฅ et eksempel pรฅ, hvordan vi kan bruge streams til at lรฆse data fra en fil. Indtast nedenstรฅende kode i program.cs filen.

Stream Reader

using System;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
  class Tutorial
  {
   static void Main(string[] args)
   {
    String path = @"D:\Example.txt";

    using (StreamReader sr = File.OpenText(path))
    {
     String s = "";

     while ((s = sr.ReadLine()) != null)
     {
      Console.WriteLine(s);
     }
    }
   Console.ReadKey();
  }
 }
}

Code Forklaring:-

  1. Fรธrst erklรฆrer vi et stream-lรฆserobjekt. Strรธmlรฆserobjektet bruges i C# til at definere en strรธm fra filen til applikationen. Dataene vil blive skubbet fra filen til strรธmmen, hver gang data lรฆses fra filen. Filen.OpenText bruges til at รฅbne filen "Example.txt" i skrivebeskyttet tilstand. Behandleren til filen sendes derefter til stream-lรฆserobjektet.
  2. Dernรฆst definerer vi en midlertidig variabel 's', som vil blive brugt til at lรฆse alle data fra filen.
  3. Vi bruger derefter stream reader metoden ReadLine til at lรฆse hver linje fra stream bufferen. Nรฅr vi udfรธrer dette drift, vil hver linje fรธrst blive overfรธrt fra filen til bufferen. Derefter vil strenglinjen blive overfรธrt fra bufferen til variablen 's'. Vi skriver derefter indholdet af strengen 's' til konsollen.

Nรฅr ovenstรฅende kode er indstillet, og projektet kรธres vha Visual Studio, fรฅr du nedenstรฅende output.

Produktion:-

Stream Reader

Fra outputtet kan du se, at Stream Reader lรฆser begge linjerne fra filen. Til sidst blev linjerne i strengen lรฆst fra streamen sendt til konsollen.

Stream Writer

Stream-skriveren bruges til at skrive data til en fil ved hjรฆlp af streams. Dataene fra applikationen skrives fรธrst ind i strรธmmen. Derefter skriver streamen dataene til filen. Lad os se pรฅ et eksempel pรฅ, hvordan vi kan bruge streams til at skrive data fra en fil. Indtast nedenstรฅende kode i program.cs filen.

Stream Writer

using System;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
  class Tutorial
  {
   static void Main(string[] args)
   {
    String path = @"D:\Example.txt";
    
    using (StreamWriter sr = File.AppendText(path))
    {
     sr.WriteLine("Guru99 - ASP.Net");
     sr.Close();

     Console.WriteLine(File.ReadAllText(path));
    }
    Console.ReadKey();
  }
 }
}

Code Forklaring:-

  1. Fรธrst erklรฆrer vi et stream writer-objekt. Strรธmskriverobjektet bruges i C# til at definere en strรธm. Streamen bruges derefter til at skrive data fra applikationen til filen. Dataene vil blive skubbet fra applikationen til streamen, nรฅr data skal skrives. Kommandoen File.AppendText bruges til at รฅbne filen "Example.txt" i en tilfรธjelsestilstand. Behandleren til filen sendes derefter til stream writer-objektet.
  2. Vi bruger stream write-metoden Writeline til at skrive linjen "Guru99 โ€“ ASP.Netโ€ til strรธmmen. Linjen fra strรธmmen vil derefter blive skrevet til filen.
  3. Vi lukker derefter stream-skriveren efter at have skrevet til filen. Det er normalt en god praksis at lukke filbehandlere, nรฅr filen ikke lรฆngere er nรธdvendig til skriveformรฅl.
  4. Til sidst lรฆser vi indholdet af filen igen og skriver det til konsolloggen. Dette er for at kontrollere, om linjen blev skrevet til filen.

Nรฅr ovenstรฅende kode er indstillet, og projektet kรธres ved hjรฆlp af Visual Studio, fรฅr du nedenstรฅende output.

Produktion:-

Stream Writer

Fra outputtet kan du se, at linjen "Guru99 โ€“ ASP.Netโ€ blev tilfรธjet til filen. Alle 3 tekstlinjer kan ses i konsollen.

Ofte Stillede Spรธrgsmรฅl

En strรธm er et mellemliggende lag mellem et program og en fil. Den opdeler store filer i smรฅ bidder, sรฅ data kan lรฆses eller skrives uden at hele filen skal indlรฆses i hukommelsen.

StreamReader lรฆser tekstdata fra en fil via en stream. Fil.OpenText returnerer en StreamReader, og dens ReadLine-metode lรฆser filen รฉn linje ad gangen.

StreamWriter skriver tekstdata til en fil via en strรธm. File.AppendText returnerer en strรธmWriter, og dens WriteLine-metode sender hver linje til filen.

Almindelige strรธmme inkluderer FileStream til filer, MemoryStream til data i hukommelsen, BufferedStream til buffering og NetworkStream til sockets. Alle stammer fra abstract Stream-klasse.

FileStream lรฆser og skriver rรฅ bytes til en fil, mens StreamReader ombryder en strรธm for at lรฆse tekst som tegn og linjer. StreamReader er nemmere til tekstfiler.

AI-assistenter som GitHub Copilot autofuldfรธrer StreamReader og StreamWriter kode, tilfรธj ved hjรฆlp af blokke til bortskaffelse og generer fillรฆsningslรธkker fra en kort kommentar.

Ja. AI-drevne vรฆrktรธjer genererer lรฆse- og skrivemetoder for streams, foreslรฅr buffering for store filer og tilfรธjer using-sรฆtninger, sรฅ streams lukkes sikkert.

En using-sรฆtning lukker og fjerner automatisk strรธmmen, nรฅr blokken slutter, selvom der opstรฅr en fejl. Dette frigiver filens handle og forhindrer ressourcelรฆkager.

Opsummer dette indlรฆg med: