Εκμάθηση ροής σε C#: StreamReader & StreamWriter [Παράδειγμα]

Τι είναι το C# Stream;

Στις λειτουργίες αρχείων C#, συνήθως οι ροές χρησιμοποιούνται για ανάγνωση και εγγραφή σε αρχεία. Μια ροή είναι ένα πρόσθετο επίπεδο που δημιουργείται μεταξύ μιας εφαρμογής και ενός αρχείου. Η ροή χρησιμοποιείται για τη διασφάλιση ομαλών λειτουργιών ανάγνωσης και εγγραφής στο αρχείο.

Οι ροές χρησιμοποιούνται συνήθως κατά την ανάγνωση δεδομένων από μεγάλα αρχεία. Με τη χρήση ροών, τα δεδομένα από μεγάλα αρχεία αναλύονται σε μικρά κομμάτια και αποστέλλονται στη ροή. Αυτά τα κομμάτια δεδομένων μπορούν στη συνέχεια να διαβαστούν από την εφαρμογή.

Ο λόγος για τον οποίο το χωρίζουμε σε μικρά κομμάτια είναι λόγω του αντίκτυπου στην απόδοση της ανάγνωσης ενός μεγάλου αρχείου σε μία λήψη. Εάν επρόκειτο να διαβάσετε τα δεδομένα από, ας πούμε, ένα αρχείο 100 MB σε μία λήψη, η εφαρμογή σας θα μπορούσε απλώς να κολλήσει και να γίνει ασταθής. Η καλύτερη προσέγγιση είναι στη συνέχεια να χρησιμοποιήσετε ροές για να χωρίσετε το αρχείο σε διαχειρίσιμα κομμάτια.

Έτσι, όταν εκτελείται μια λειτουργία εγγραφής στο αρχείο, τα δεδομένα που πρόκειται να γραφτούν, πρώτα γράφονται στη ροή. Από τη ροή, τα δεδομένα εγγράφονται στη συνέχεια στο αρχείο. Το ίδιο ισχύει και για τη λειτουργία ανάγνωσης. Στη λειτουργία ανάγνωσης, τα δεδομένα μεταφέρονται πρώτα από το αρχείο στη ροή. Στη συνέχεια, τα δεδομένα διαβάζονται από την εφαρμογή μέσω της ροής. Ας δούμε ένα παράδειγμα για το πώς μπορούμε να διαβάζουμε και να γράφουμε χρησιμοποιώντας ροές.

Αναγνώστης ροής

Ο αναγνώστης ροής χρησιμοποιείται για την ανάγνωση δεδομένων από ένα αρχείο χρησιμοποιώντας ροές. Τα δεδομένα από το αρχείο διαβάζονται πρώτα στη ροή. Στη συνέχεια, η εφαρμογή διαβάζει τα δεδομένα από τη ροή.

Για το παράδειγμά μας, θα υποθέσουμε ότι έχουμε ένα αρχείο στη μονάδα δίσκου D που ονομάζεται Example.txt. Το αρχείο θα είναι ένα απλό αρχείο κειμένου και θα έχει 2 γραμμές όπως φαίνεται παρακάτω

  • Guru99 – .Net
  • Guru99 -C#

Για το παράδειγμά μας, θα δημιουργήσουμε μια απλή εφαρμογή Κονσόλας και θα εργαστούμε με ροές αρχείων

Ας δούμε ένα παράδειγμα για το πώς μπορούμε να χρησιμοποιήσουμε ροές για την ανάγνωση δεδομένων από ένα αρχείο. Εισαγάγετε τον παρακάτω κώδικα στο αρχείο program.cs.

Αναγνώστης ροής

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

Επεξήγηση κώδικα: -

  1. Πρώτον, δηλώνουμε ένα αντικείμενο ανάγνωσης ροής. Το αντικείμενο ανάγνωσης ροής χρησιμοποιείται στη C# για να ορίσει μια ροή από το αρχείο στην εφαρμογή. Τα δεδομένα θα προωθούνται από το αρχείο στη ροή κάθε φορά που διαβάζονται δεδομένα από το αρχείο. Το αρχείο.OpenText χρησιμοποιείται για το άνοιγμα του αρχείου "Example.txt" σε λειτουργία μόνο για ανάγνωση. Στη συνέχεια, ο χειριστής του αρχείου αποστέλλεται στο αντικείμενο ανάγνωσης ροής.
  2. Στη συνέχεια, ορίζουμε μια προσωρινή μεταβλητή 's' που θα χρησιμοποιηθεί για την ανάγνωση όλων των δεδομένων από το αρχείο.
  3. Στη συνέχεια χρησιμοποιούμε τη μέθοδο ανάγνωσης ροής ReadLine για να διαβάσουμε κάθε γραμμή από το buffer ροής. Όταν το κάνουμε αυτό λειτουργία, κάθε γραμμή θα μεταφερθεί πρώτα από το αρχείο στο buffer. Στη συνέχεια, η γραμμή συμβολοσειράς θα μεταφερθεί από το buffer στη μεταβλητή 's'. Στη συνέχεια γράφουμε τα περιεχόμενα της συμβολοσειράς 's' στην κονσόλα.

Όταν οριστεί ο παραπάνω κώδικας και το έργο εκτελείται χρησιμοποιώντας Visual Studio, θα λάβετε την παρακάτω έξοδο.

Παραγωγή:-

Αναγνώστης ροής

Από την έξοδο, μπορείτε να δείτε ότι το Stream Reader διαβάζει και τις δύο γραμμές από το αρχείο. Τέλος, οι γραμμές της συμβολοσειράς που διαβάστηκαν από τη ροή στάλθηκαν στην Κονσόλα.

Stream Writer

Το πρόγραμμα εγγραφής ροής χρησιμοποιείται για την εγγραφή δεδομένων σε ένα αρχείο χρησιμοποιώντας ροές. Τα δεδομένα από την εφαρμογή εγγράφονται πρώτα στη ροή. Μετά από αυτό, η ροή γράφει τα δεδομένα στο αρχείο. Ας δούμε ένα παράδειγμα για το πώς μπορούμε να χρησιμοποιήσουμε ροές για την εγγραφή δεδομένων από ένα αρχείο. Εισαγάγετε τον παρακάτω κώδικα στο αρχείο program.cs.

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

Επεξήγηση κώδικα: -

  1. Πρώτον, δηλώνουμε ένα αντικείμενο εγγραφής ροής. Το αντικείμενο εγγραφής ροής χρησιμοποιείται στη C# για να ορίσει μια ροή. Στη συνέχεια, η ροή χρησιμοποιείται για την εγγραφή δεδομένων από την εφαρμογή στο αρχείο. Τα δεδομένα θα προωθούνται από την εφαρμογή στη ροή όποτε χρειάζεται να γραφτούν δεδομένα. Η εντολή File.AppendText χρησιμοποιείται για το άνοιγμα του αρχείου "Example.txt" σε λειτουργία προσάρτησης. Στη συνέχεια, ο χειριστής του αρχείου αποστέλλεται στο αντικείμενο εγγραφής ροής.
  2. Χρησιμοποιούμε τη μέθοδο εγγραφής ροής Writeline για να γράψουμε τη γραμμή "Guru99 – ASP.Net" στη ροή. Από τη ροή, η γραμμή θα εγγραφεί στο αρχείο.
  3. Στη συνέχεια, κλείνουμε το πρόγραμμα εγγραφής ροής μετά την εγγραφή στο αρχείο. Είναι συνήθως μια καλή πρακτική να κλείνουμε τους χειριστές αρχείων όταν το αρχείο δεν απαιτείται πλέον για λόγους συγγραφής.
  4. Τέλος, διαβάζουμε ξανά τα περιεχόμενα του αρχείου και το γράφουμε στο αρχείο καταγραφής της κονσόλας. Αυτό γίνεται για να ελέγξετε εάν η γραμμή εγγράφηκε στο αρχείο.

Όταν οριστεί ο παραπάνω κώδικας και το έργο εκτελείται χρησιμοποιώντας το Visual Studio, θα λάβετε την παρακάτω έξοδο.

Παραγωγή:-

Stream Writer

Από την έξοδο, μπορείτε να δείτε ότι η γραμμή "Guru99 – ASP.Net" προστέθηκε στο αρχείο με επιτυχία. Στην κονσόλα φαίνονται και οι 3 γραμμές κειμένου.

Σύνοψη

  • Οι ροές χρησιμοποιούνται ως ενδιάμεσο επίπεδο μεταξύ της εφαρμογής και του αρχείου.
  • Ένα StreamReader χρησιμοποιείται κάθε φορά που απαιτείται η ανάγνωση δεδομένων από ένα αρχείο.
  • Ένας Streamwriter χρησιμοποιείται κάθε φορά που χρειάζεται να εγγραφούν δεδομένα σε ένα αρχείο.