Ροή σε C#: StreamReader & ΡοήWriter [Παράδειγμα]

⚡ Έξυπνη Σύνοψη

Η ροή AC# είναι ένα επίπεδο μεταξύ της εφαρμογής σας και ενός αρχείου που σας επιτρέπει να διαβάζετε ή να γράφετε δεδομένα σε μικρά τμήματα. Εδώ θα μάθετε πώς λειτουργούν το StreamReader και το Stream.Writer εργασία, με παραδείγματα και τους κύριους τύπους ροής.

  • 🌊 Αυτό που είναι: Μια ροή είναι ένα ενδιάμεσο επίπεδο μεταξύ της εφαρμογής σας και ενός αρχείου.
  • 📖 Αναγνώστης ροής: Το StreamReader διαβάζει κείμενο από ένα αρχείο μία γραμμή ή ένα τμήμα κάθε φορά.
  • ✍️ ΡεύμαWriter: ΡεύμαWriter γράφει κείμενο σε ένα αρχείο μέσω μιας ροής.
  • 🧩 Τύποι ροής: FileStream, MemoryStream και BufferΤα edStream προέρχονται όλα από την κλάση Stream.
  • 🤖 Βοήθεια με την Τεχνητή Νοημοσύνη: Τα εργαλεία τεχνητής νοημοσύνης όπως το GitHub Copilot δημιουργούν άμεσα κώδικα ροής C#.

Αναγνώστης ροής C# και Writer

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

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

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

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

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

Τύποι ροών σε C#

Όλες οι κλάσεις ροής σε C# προέρχονται από το abstract Stream τάξη στο System.IO χώρος ονομάτων. Κάθε τύπος στοχεύει σε διαφορετική πηγή δεδομένων, αλλά χρησιμοποιεί τις ίδιες μεθόδους ανάγνωσης και εγγραφής. Οι πιο συχνά χρησιμοποιούμενες ροές παρατίθενται παρακάτω.

  • Ροή αρχείων Διαβάζει και γράφει σε αρχεία στον δίσκο, ένα byte ή ένα μπλοκ τη φορά.
  • MemoryStream Αποθηκεύει δεδομένα στη μνήμη αντί για αρχείο, κάτι που είναι χρήσιμο για προσωρινά buffer.
  • BufferedStream αναδιπλώνει μια άλλη ροή για να μειώσει τον αριθμό των αργών λειτουργιών δίσκου ή δικτύου.
  • NetworkStream στέλνει και λαμβάνει δεδομένα μέσω μιας υποδοχής δικτύου.

Για την εργασία με κείμενο, η C# παρέχει το StreamReader και StreamWriter βοηθητικές κλάσεις, οι οποίες περιβάλλουν ένα ρεύμα και καλύπτονται στις επόμενες ενότητες.

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

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

Για το παράδειγμά μας, θα υποθέσουμε ότι έχουμε ένα αρχείο στη μονάδα δίσκου 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();
  }
 }
}

Code Εξήγηση:-

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

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

Παραγωγή:-

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

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

Ρεύμα Writer

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

Ρεύμα 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 Εξήγηση:-

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

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

Παραγωγή:-

Ρεύμα Writer

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

Συχνές Ερωτήσεις

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

Το StreamReader διαβάζει δεδομένα κειμένου από ένα αρχείο μέσω μιας ροής. Αρχείο.OpenText επιστρέφει ένα StreamReader και η μέθοδος ReadLine διαβάζει το αρχείο μία γραμμή τη φορά.

ΡεύμαWriter γράφει δεδομένα κειμένου σε ένα αρχείο μέσω μιας ροής. Το File.AppendText επιστρέφει μια ΡοήWriter, και η μέθοδος WriteLine στέλνει κάθε γραμμή στο αρχείο.

Συνήθεις ροές περιλαμβάνουν το FileStream για αρχεία, το MemoryStream για δεδομένα στη μνήμη, BufferedStream για buffering και NetworkStream για sockets. Όλα προέρχονται από το abstract Κλάση ροής.

Το FileStream διαβάζει και γράφει ακατέργαστα byte σε ένα αρχείο, ενώ το StreamReader αναδιπλώνει μια ροή για να διαβάσει κείμενο ως χαρακτήρες και γραμμές. Το StreamReader είναι πιο εύκολο για αρχεία κειμένου.

Βοηθοί τεχνητής νοημοσύνης όπως το GitHub Copilot συμπληρώνουν αυτόματα το StreamReader και το StreamWriter κώδικα, προσθήκη χρησιμοποιώντας μπλοκ για απόρριψη και δημιουργία βρόχων ανάγνωσης αρχείων από ένα σύντομο σχόλιο.

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

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

Συνοψίστε αυτήν την ανάρτηση με: